[{"data":1,"prerenderedAt":9579},["ShallowReactive",2],{"navigation":3,"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-licenses-python":99,"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-licenses-python-surround":9578},[4,16,52,71,91],{"title":5,"path":6,"stem":7,"children":8,"icon":15},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11],{"title":10,"path":6,"stem":7},"Introduction",{"title":12,"path":13,"stem":14},"Authentication","\u002Fgetting-started\u002Fauthentication","1.getting-started\u002F2.authentication","i-tabler-rocket",{"title":17,"path":18,"stem":19,"children":20,"icon":51},"GraphQL API","\u002Fgraphql-api","2.graphql-api\u002F1.index",[21,23,27,31,35,39,43,47],{"title":22,"path":18,"stem":19},"API Overview",{"title":24,"path":25,"stem":26},"Querying Patterns","\u002Fgraphql-api\u002Fquerying","2.graphql-api\u002F2.querying",{"title":28,"path":29,"stem":30},"Mutation Patterns","\u002Fgraphql-api\u002Fmutations","2.graphql-api\u002F3.mutations",{"title":32,"path":33,"stem":34},"List SaaS Applications","\u002Fgraphql-api\u002Fguides\u002Flist-applications","2.graphql-api\u002F4.guides\u002F1.list-applications",{"title":36,"path":37,"stem":38},"Find Unused Licenses","\u002Fgraphql-api\u002Fguides\u002Ffind-unused-licenses","2.graphql-api\u002F4.guides\u002F2.find-unused-licenses",{"title":40,"path":41,"stem":42},"Retrieve Upcoming Renewals","\u002Fgraphql-api\u002Fguides\u002Fupcoming-renewals","2.graphql-api\u002F4.guides\u002F3.upcoming-renewals",{"title":44,"path":45,"stem":46},"Handle GraphQL Errors","\u002Fgraphql-api\u002Fguides\u002Fhandle-errors","2.graphql-api\u002F4.guides\u002F4.handle-errors",{"title":48,"path":49,"icon":50},"API Reference","\u002Fgql-schema-reference","i-tabler-file-code","i-tabler-braces",{"title":53,"path":54,"stem":55,"children":56,"icon":70},"Sync API","\u002Fsync-api","3.sync-api\u002F1.index",[57,59,63,67],{"title":58,"path":54,"stem":55},"Viio Sync API",{"title":60,"path":61,"stem":62},"Quickstart","\u002Fsync-api\u002Fquickstart","3.sync-api\u002F2.quickstart",{"title":64,"path":65,"icon":66},"Examples","\u002Fsync-api\u002Fexamples","i-tabler-code",{"title":68,"path":69,"icon":50},"SDK Reference","\u002Fsync-api\u002Fapi-reference","i-tabler-refresh",{"title":72,"path":73,"stem":74,"children":75,"icon":90},"MCP Server","\u002Fmcp-server","4.mcp-server\u002F1.index",[76,78,82,86],{"title":77,"path":73,"stem":74},"Viio MCP Server",{"title":79,"path":80,"stem":81},"Setup","\u002Fmcp-server\u002Fsetup","4.mcp-server\u002F2.setup",{"title":83,"path":84,"stem":85},"Available Tools","\u002Fmcp-server\u002Ftools","4.mcp-server\u002F3.tools",{"title":87,"path":88,"stem":89},"SaaS Analysis Use Cases","\u002Fmcp-server\u002Fuse-cases","4.mcp-server\u002F4.use-cases","i-tabler-robot",{"title":92,"path":93,"stem":94,"children":95,"icon":98},"AI Integration","\u002Fai","5.ai\u002F1.index",[96],{"title":97,"path":93,"stem":94},"llms.txt","i-tabler-sparkles",{"id":100,"title":101,"body":102,"dateModified":9565,"datePublished":9566,"description":9567,"extension":9568,"links":9569,"meta":9570,"navigation":9571,"path":9572,"seo":9573,"stem":9576,"__hash__":9577},"docs\u002F3.sync-api\u002F6.examples\u002F3.microsoft-licenses-python.md","Microsoft Licenses",{"type":103,"value":104,"toc":9560},"minimark",[105,109,211,214,225,233,238,253,362,384,415,419,425,8286,8289,8388,8391,8400,8404,8407,8424,8427,9521,9524,9536,9544,9549,9553,9556],[106,107,108],"p",{},"This example sends your Microsoft 365 licensing and usage to Viio, the same license and Microsoft 365 usage data that Viio's managed Microsoft integration sends:",[110,111,112,128],"table",{},[113,114,115],"thead",{},[116,117,118,122,125],"tr",{},[119,120,121],"th",{},"Record",[119,123,124],{},"Microsoft Graph source",[119,126,127],{},"Sent as",[129,130,131,150,166,182,198],"tbody",{},[116,132,133,137,140],{},[134,135,136],"td",{},"Plan",[134,138,139],{},"Each subscribed SKU, with its service plans and the company subscriptions behind it",[134,141,142],{},[143,144,146],"a",{"href":145},"\u002Fsync-api\u002Fapi-reference\u002Fmodels#microsoftplandetails",[147,148,149],"code",{},"MicrosoftPlanDetails",[116,151,152,155,158],{},[134,153,154],{},"Account",[134,156,157],{},"Each user",[134,159,160],{},[143,161,163],{"href":162},"\u002Fsync-api\u002Fapi-reference\u002Fmodels#genericaccountdetails",[147,164,165],{},"GenericAccountDetails",[116,167,168,171,174],{},[134,169,170],{},"License",[134,172,173],{},"Each SKU assigned to a user, directly or through a group",[134,175,176],{},[143,177,179],{"href":178},"\u002Fsync-api\u002Fapi-reference\u002Fmodels#genericlicensedetails",[147,180,181],{},"GenericLicenseDetails",[116,183,184,187,190],{},[134,185,186],{},"Usage",[134,188,189],{},"Each service a user was last active in, such as Exchange, OneDrive, SharePoint, or Teams, from the Microsoft 365 active users report",[134,191,192],{},[143,193,195],{"href":194},"\u002Fsync-api\u002Fapi-reference\u002Fmodels#genericusagedetails",[147,196,197],{},"GenericUsageDetails",[116,199,200,202,205],{},[134,201,186],{},[134,203,204],{},"Each app a user used, such as Outlook, Word, or Excel, from the Microsoft 365 Apps usage report",[134,206,207],{},[143,208,209],{"href":194},[147,210,197],{},[106,212,213],{},"Plans carry the SKU's seat counts and, for each subscription, its renewal date, trial flag, and total licenses. Usage covers the last 180 days.",[106,215,216,217,221,222,224],{},"For SDK installation and environment variables, see ",[143,218,220],{"href":219},"\u002Fsync-api\u002Fexamples#shared-setup","Shared Setup",". ",[147,223,149],{}," requires SDK 0.5.0 or later.",[226,227,230],"callout",{"icon":228,"color":229},"i-tabler-alert-triangle","amber",[106,231,232],{},"The script must process every Microsoft Graph page before it completes the batch. Completing a partial snapshot marks valid plans, accounts, or licenses as removed.",[234,235,237],"h2",{"id":236},"microsoft-graph-permissions","Microsoft Graph Permissions",[106,239,240,241,244,245,248,249,252],{},"Grant ",[147,242,243],{},"Organization.Read.All",", ",[147,246,247],{},"User.Read.All",", and ",[147,250,251],{},"Reports.Read.All",":",[110,254,255,268],{},[113,256,257],{},[116,258,259,262,265],{},[119,260,261],{},"Endpoint",[119,263,264],{},"Data",[119,266,267],{},"Least privileged application permission",[129,269,270,290,308,326,344],{},[116,271,272,282,285],{},[134,273,274],{},[143,275,279],{"href":276,"rel":277},"https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Fsubscribedsku-list",[278],"nofollow",[147,280,281],{},"GET \u002FsubscribedSkus",[134,283,284],{},"SKUs, seat counts, and service plans",[134,286,287],{},[147,288,289],{},"LicenseAssignment.Read.All",[116,291,292,301,304],{},[134,293,294],{},[143,295,298],{"href":296,"rel":297},"https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Fdirectory-list-subscriptions",[278],[147,299,300],{},"GET \u002Fdirectory\u002Fsubscriptions",[134,302,303],{},"Company subscriptions",[134,305,306],{},[147,307,243],{},[116,309,310,319,322],{},[134,311,312],{},[143,313,316],{"href":314,"rel":315},"https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Fuser-list",[278],[147,317,318],{},"GET \u002Fusers",[134,320,321],{},"Users and their assigned licenses",[134,323,324],{},[147,325,247],{},[116,327,328,337,340],{},[134,329,330],{},[143,331,334],{"href":332,"rel":333},"https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Freportroot-getoffice365activeuserdetail",[278],[147,335,336],{},"GET \u002Freports\u002FgetOffice365ActiveUserDetail",[134,338,339],{},"Each user's last activity date per service",[134,341,342],{},[147,343,251],{},[116,345,346,355,358],{},[134,347,348],{},[143,349,352],{"href":350,"rel":351},"https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Freportroot-getm365appuserdetail",[278],[147,353,354],{},"GET \u002Freports\u002FgetM365AppUserDetail",[134,356,357],{},"The Microsoft 365 apps each user used",[134,359,360],{},[147,361,251],{},[106,363,364,366,367,370,371,373,374,377,378,380,381,383],{},[147,365,243],{}," also covers ",[147,368,369],{},"\u002FsubscribedSkus",". If the application has ",[147,372,289],{}," instead, the subscriptions request returns ",[147,375,376],{},"403 Forbidden",", and the script sends the plans without subscriptions. Without ",[147,379,251],{},", the report requests return ",[147,382,376],{},", and the script sends no usage.",[226,385,387],{"icon":386},"i-tabler-info-circle",[106,388,389,390,394,395,400,401,404,405,404,408,404,411,414],{},"Microsoft 365 hides usernames in usage reports by default, and that includes the Microsoft Graph reports. The script matches report rows to users by user principal name, so it skips every row while names are hidden. To send usage, a Global Administrator must clear ",[391,392,393],"strong",{},"Conceal user, group, and site names in all reports"," in the ",[143,396,399],{"href":397,"rel":398},"https:\u002F\u002Fadmin.microsoft.com",[278],"Microsoft 365 admin center"," under ",[391,402,403],{},"Settings"," > ",[391,406,407],{},"Org settings",[391,409,410],{},"Services",[391,412,413],{},"Reports",". The change takes a few minutes to apply.",[234,416,418],{"id":417},"script","Script",[106,420,421,422,252],{},"Create ",[147,423,424],{},"microsoft_licenses.py",[426,427,432],"pre",{"className":428,"code":429,"language":430,"meta":431,"style":431},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import argparse\nimport asyncio\nimport csv\nimport io\nimport json\nimport logging\nimport os\nfrom collections import defaultdict\nfrom collections.abc import Awaitable, Callable\nfrom typing import Any\nfrom urllib.error import HTTPError\nfrom urllib.parse import urlencode, urlsplit\nfrom urllib.request import Request, urlopen\n\nfrom google.protobuf.json_format import MessageToJson\nfrom google.protobuf.timestamp_pb2 import Timestamp\nfrom viio_sync_api import SyncApiAuthentication, SyncApiClient, SyncApiClientOptions\nfrom viio_sync_api.v1 import (\n    Account,\n    AccountRecords,\n    GenericAccountDetails,\n    GenericLicenseDetails,\n    GenericUsageDetails,\n    License,\n    LicenseRecords,\n    MicrosoftCompanySubscription,\n    MicrosoftLicenseUnitsDetail,\n    MicrosoftPlanDetails,\n    MicrosoftServicePlanInfo,\n    Plan,\n    PlanRecords,\n    SyncRecordsRequest,\n    Usage,\n    UsageRecords,\n)\n\nWrite = Callable[[SyncRecordsRequest], Awaitable[None]]\nReportRow = dict[str, str]\n\nGRAPH_SUBSCRIBED_SKUS_URL = \"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002FsubscribedSkus\"\nGRAPH_SUBSCRIPTIONS_URL = \"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Fdirectory\u002Fsubscriptions\"\nGRAPH_USERS_URL = \"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Fusers?\" + urlencode(\n    {\n        \"$select\": \"id,displayName,mail,userPrincipalName,accountEnabled,userType,assignedLicenses\",\n        \"$top\": \"999\",\n    }\n)\nGRAPH_ACTIVE_USERS_REPORT_URL = (\n    \"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Freports\u002FgetOffice365ActiveUserDetail(period='D180')\"\n)\nGRAPH_APPS_REPORT_URL = \"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Freports\u002FgetM365AppUserDetail(period='D180')\"\nSKIPPED_CAPABILITY_STATUSES = {\"Suspended\", \"Deleted\", \"LockedOut\"}\nLAST_ACTIVITY_COLUMN_SUFFIX = \" Last Activity Date\"\nAPPS_REPORT_NON_APP_COLUMNS = {\n    \"Report Refresh Date\",\n    \"User Principal Name\",\n    \"Last Activation Date\",\n    \"Last Activity Date\",\n    \"Report Period\",\n    \"Windows\",\n    \"Mac\",\n    \"Mobile\",\n    \"Web\",\n}\nUSAGE_RECORDS_PER_WRITE = 1000\n\nlogger = logging.getLogger(\"microsoft_licenses\")\n\n\ndef request_json(request: Request) -> dict[str, Any]:\n    with urlopen(request, timeout=30) as response:\n        payload = json.load(response)\n    if not isinstance(payload, dict):\n        raise RuntimeError(\"Remote service returned an invalid JSON response\")\n    return payload\n\n\ndef request_graph_token() -> str:\n    tenant_id = os.environ[\"MICROSOFT_TENANT_ID\"]\n    allowed_characters = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-\"\n    if not tenant_id or any(character not in allowed_characters for character in tenant_id):\n        raise ValueError(\"MICROSOFT_TENANT_ID must be a tenant ID or verified domain name\")\n\n    request = Request(\n        f\"https:\u002F\u002Flogin.microsoftonline.com\u002F{tenant_id}\u002Foauth2\u002Fv2.0\u002Ftoken\",\n        data=urlencode(\n            {\n                \"grant_type\": \"client_credentials\",\n                \"client_id\": os.environ[\"MICROSOFT_CLIENT_ID\"],\n                \"client_secret\": os.environ[\"MICROSOFT_CLIENT_SECRET\"],\n                \"scope\": \"https:\u002F\u002Fgraph.microsoft.com\u002F.default\",\n            }\n        ).encode(),\n        headers={\"Content-Type\": \"application\u002Fx-www-form-urlencoded\"},\n        method=\"POST\",\n    )\n    token = request_json(request).get(\"access_token\")\n    if not isinstance(token, str) or not token:\n        raise RuntimeError(\"Microsoft identity platform returned no access token\")\n    return token\n\n\ndef request_graph_page(url: str, access_token: str) -> tuple[list[dict[str, Any]], str | None]:\n    parsed_url = urlsplit(url)\n    if parsed_url.scheme != \"https\" or parsed_url.hostname != \"graph.microsoft.com\":\n        raise RuntimeError(\"Microsoft Graph returned an invalid pagination URL\")\n\n    payload = request_json(\n        Request(\n            url,\n            headers={\n                \"Accept\": \"application\u002Fjson\",\n                \"Authorization\": f\"Bearer {access_token}\",\n            },\n        )\n    )\n    items = payload.get(\"value\")\n    if not isinstance(items, list) or not all(isinstance(item, dict) for item in items):\n        raise RuntimeError(\"Microsoft Graph returned an invalid collection response\")\n\n    next_url = payload.get(\"@odata.nextLink\")\n    if next_url is not None and not isinstance(next_url, str):\n        raise RuntimeError(\"Microsoft Graph returned an invalid pagination URL\")\n    return items, next_url\n\n\ndef request_graph_collection(url: str, access_token: str) -> list[dict[str, Any]]:\n    items: list[dict[str, Any]] = []\n    next_url: str | None = url\n    while next_url is not None:\n        page, next_url = request_graph_page(next_url, access_token)\n        items.extend(page)\n    return items\n\n\ndef request_graph_report(url: str, access_token: str) -> list[ReportRow]:\n    request = Request(url)\n    request.add_unredirected_header(\"Authorization\", f\"Bearer {access_token}\")\n    with urlopen(request, timeout=300) as response:\n        content = response.read().decode(\"utf-8-sig\")\n    return list(csv.DictReader(io.StringIO(content)))\n\n\ndef required_string(source: dict[str, Any], field: str) -> str:\n    value = source.get(field)\n    if not isinstance(value, str) or not value:\n        raise RuntimeError(f\"Microsoft Graph returned an object without {field}\")\n    return value\n\n\ndef optional_string(source: dict[str, Any], field: str) -> str | None:\n    value = source.get(field)\n    return value if isinstance(value, str) and value else None\n\n\ndef optional_int(source: dict[str, Any], field: str) -> int | None:\n    value = source.get(field)\n    return value if isinstance(value, int) and not isinstance(value, bool) else None\n\n\ndef optional_bool(source: dict[str, Any], field: str) -> bool | None:\n    value = source.get(field)\n    return value if isinstance(value, bool) else None\n\n\ndef optional_timestamp(source: dict[str, Any], field: str) -> Timestamp | None:\n    value = optional_string(source, field)\n    if value is None:\n        return None\n    timestamp = Timestamp()\n    timestamp.FromJsonString(value)\n    return timestamp\n\n\ndef strings(source: dict[str, Any], field: str) -> list[str]:\n    value = source.get(field)\n    return [item for item in value if isinstance(item, str)] if isinstance(value, list) else []\n\n\ndef objects(source: dict[str, Any], field: str) -> list[dict[str, Any]]:\n    value = source.get(field)\n    return [item for item in value if isinstance(item, dict)] if isinstance(value, list) else []\n\n\ndef service_plan_info(service_plan: dict[str, Any]) -> MicrosoftServicePlanInfo:\n    return MicrosoftServicePlanInfo(\n        service_plan_id=optional_string(service_plan, \"servicePlanId\"),\n        service_plan_name=optional_string(service_plan, \"servicePlanName\"),\n        provisioning_status=optional_string(service_plan, \"provisioningStatus\"),\n        applies_to=optional_string(service_plan, \"appliesTo\"),\n    )\n\n\ndef company_subscription(subscription: dict[str, Any]) -> MicrosoftCompanySubscription:\n    return MicrosoftCompanySubscription(\n        id=required_string(subscription, \"id\"),\n        commerce_subscription_id=optional_string(subscription, \"commerceSubscriptionId\"),\n        created_date_time=optional_timestamp(subscription, \"createdDateTime\"),\n        is_trial=optional_bool(subscription, \"isTrial\"),\n        next_lifecycle_date_time=optional_timestamp(subscription, \"nextLifecycleDateTime\"),\n        owner_id=optional_string(subscription, \"ownerId\"),\n        owner_tenant_id=optional_string(subscription, \"ownerTenantId\"),\n        owner_type=optional_string(subscription, \"ownerType\"),\n        service_status=[service_plan_info(item) for item in objects(subscription, \"serviceStatus\")],\n        sku_id=optional_string(subscription, \"skuId\"),\n        sku_part_number=optional_string(subscription, \"skuPartNumber\"),\n        status=optional_string(subscription, \"status\"),\n        total_licenses=optional_int(subscription, \"totalLicenses\"),\n    )\n\n\ndef prepaid_units(sku: dict[str, Any]) -> MicrosoftLicenseUnitsDetail | None:\n    units = sku.get(\"prepaidUnits\")\n    if not isinstance(units, dict):\n        return None\n    return MicrosoftLicenseUnitsDetail(\n        enabled=optional_int(units, \"enabled\"),\n        locked_out=optional_int(units, \"lockedOut\"),\n        suspended=optional_int(units, \"suspended\"),\n        warning=optional_int(units, \"warning\"),\n    )\n\n\ndef plan_from_subscribed_sku(\n    sku: dict[str, Any],\n    subscriptions_by_sku_id: dict[str, list[MicrosoftCompanySubscription]],\n) -> Plan:\n    sku_id = required_string(sku, \"skuId\")\n    return Plan(\n        microsoft=MicrosoftPlanDetails(\n            sku_id=sku_id,\n            sku_part_number=required_string(sku, \"skuPartNumber\"),\n            account_id=optional_string(sku, \"accountId\"),\n            account_name=optional_string(sku, \"accountName\"),\n            applies_to=optional_string(sku, \"appliesTo\"),\n            capability_status=optional_string(sku, \"capabilityStatus\"),\n            consumed_units=optional_int(sku, \"consumedUnits\"),\n            prepaid_units=prepaid_units(sku),\n            service_plans=[service_plan_info(item) for item in objects(sku, \"servicePlans\")],\n            subscription_ids=strings(sku, \"subscriptionIds\"),\n            subscriptions=subscriptions_by_sku_id.get(sku_id.lower(), []),\n        )\n    )\n\n\ndef fetch_company_subscriptions(access_token: str) -> dict[str, list[MicrosoftCompanySubscription]]:\n    try:\n        subscriptions = request_graph_collection(GRAPH_SUBSCRIPTIONS_URL, access_token)\n    except HTTPError as error:\n        if error.code != 403:\n            raise\n        logger.warning(\"Organization.Read.All is not granted, so plans are sent without subscriptions\")\n        return {}\n\n    subscriptions_by_sku_id: dict[str, list[MicrosoftCompanySubscription]] = defaultdict(list)\n    for subscription in subscriptions:\n        sku_id = optional_string(subscription, \"skuId\")\n        if sku_id is not None:\n            subscriptions_by_sku_id[sku_id.lower()].append(company_subscription(subscription))\n    return subscriptions_by_sku_id\n\n\ndef fetch_plans(access_token: str) -> list[Plan]:\n    subscriptions_by_sku_id = fetch_company_subscriptions(access_token)\n    skus = request_graph_collection(GRAPH_SUBSCRIBED_SKUS_URL, access_token)\n    return [\n        plan_from_subscribed_sku(sku, subscriptions_by_sku_id)\n        for sku in skus\n        if sku.get(\"capabilityStatus\") not in SKIPPED_CAPABILITY_STATUSES\n    ]\n\n\ndef account_from_graph_user(user: dict[str, Any]) -> Account:\n    account_enabled = optional_bool(user, \"accountEnabled\")\n    return Account(\n        generic=GenericAccountDetails(\n            id=required_string(user, \"id\"),\n            name=optional_string(user, \"displayName\"),\n            email=optional_string(user, \"mail\") or optional_string(user, \"userPrincipalName\"),\n            active=True if account_enabled is None else account_enabled,\n            type=optional_string(user, \"userType\"),\n        )\n    )\n\n\ndef licenses_from_graph_user(user: dict[str, Any], plan_ids: dict[str, str]) -> list[License]:\n    user_id = required_string(user, \"id\")\n    licenses: list[License] = []\n    for assigned_license in objects(user, \"assignedLicenses\"):\n        sku_id = optional_string(assigned_license, \"skuId\")\n        plan_id = plan_ids.get(sku_id.lower()) if sku_id is not None else None\n        if plan_id is not None:\n            licenses.append(\n                License(\n                    generic=GenericLicenseDetails(\n                        source_id=f\"{user_id}_{plan_id}\",\n                        source_account_id=user_id,\n                        source_plan_id=plan_id,\n                        billable=True,\n                    )\n                )\n            )\n    return licenses\n\n\ndef usage_record(user_id: str, product_name: str, last_activity_date: str) -> Usage:\n    last_activity = Timestamp()\n    last_activity.FromJsonString(f\"{last_activity_date}T00:00:00Z\")\n    return Usage(\n        generic=GenericUsageDetails(\n            id=f\"{user_id}-{product_name}-{last_activity_date}\",\n            source_actor_id=user_id,\n            external_product_name=product_name,\n            last_activity=last_activity,\n        )\n    )\n\n\ndef usage_from_active_users_row(row: ReportRow, user_id: str) -> list[Usage]:\n    return [\n        usage_record(user_id, column.removesuffix(LAST_ACTIVITY_COLUMN_SUFFIX), last_activity_date)\n        for column, last_activity_date in row.items()\n        if column.endswith(LAST_ACTIVITY_COLUMN_SUFFIX) and last_activity_date\n    ]\n\n\ndef usage_from_apps_row(row: ReportRow, user_id: str) -> list[Usage]:\n    last_activity_date = row.get(\"Last Activity Date\")\n    if not last_activity_date:\n        return []\n    return [\n        usage_record(user_id, column, last_activity_date)\n        for column, used in row.items()\n        if column not in APPS_REPORT_NON_APP_COLUMNS and used == \"Yes\"\n    ]\n\n\ndef usage_from_report(\n    rows: list[ReportRow],\n    user_ids: dict[str, str],\n    usage_from_row: Callable[[ReportRow, str], list[Usage]],\n) -> list[Usage]:\n    usage: list[Usage] = []\n    skipped_rows = 0\n    for row in rows:\n        user_id = user_ids.get((row.get(\"User Principal Name\") or \"\").lower())\n        if user_id is None:\n            skipped_rows += 1\n        else:\n            usage.extend(usage_from_row(row, user_id))\n    if skipped_rows:\n        logger.warning(\"Skipped %d report rows that match no user\", skipped_rows)\n    return usage\n\n\ndef fetch_usage(access_token: str, user_ids: dict[str, str]) -> list[Usage]:\n    try:\n        active_users_rows = request_graph_report(GRAPH_ACTIVE_USERS_REPORT_URL, access_token)\n        apps_rows = request_graph_report(GRAPH_APPS_REPORT_URL, access_token)\n    except HTTPError as error:\n        if error.code != 403:\n            raise\n        logger.warning(\"Reports.Read.All is not granted, so no usage is sent\")\n        return []\n    return [\n        *usage_from_report(active_users_rows, user_ids, usage_from_active_users_row),\n        *usage_from_report(apps_rows, user_ids, usage_from_apps_row),\n    ]\n\n\nasync def sync_microsoft_licenses(write: Write) -> dict[str, int]:\n    access_token = await asyncio.to_thread(request_graph_token)\n    plans = await asyncio.to_thread(fetch_plans, access_token)\n    await write(SyncRecordsRequest(plans=PlanRecords(records=plans)))\n    plan_ids = {plan.microsoft.sku_id.lower(): plan.microsoft.sku_id for plan in plans}\n\n    counts = {\"plans\": len(plans), \"accounts\": 0, \"licenses\": 0, \"usage\": 0}\n    user_ids: dict[str, str] = {}\n    next_url: str | None = GRAPH_USERS_URL\n    while next_url is not None:\n        users, next_url = await asyncio.to_thread(request_graph_page, next_url, access_token)\n        for user in users:\n            principal_name = optional_string(user, \"userPrincipalName\")\n            if principal_name is not None:\n                user_ids[principal_name.lower()] = required_string(user, \"id\")\n\n        accounts = [account_from_graph_user(user) for user in users]\n        if accounts:\n            await write(SyncRecordsRequest(accounts=AccountRecords(records=accounts)))\n            counts[\"accounts\"] += len(accounts)\n\n        licenses = [record for user in users for record in licenses_from_graph_user(user, plan_ids)]\n        if licenses:\n            await write(SyncRecordsRequest(licenses=LicenseRecords(records=licenses)))\n            counts[\"licenses\"] += len(licenses)\n\n    if counts[\"accounts\"] == 0:\n        await write(SyncRecordsRequest(accounts=AccountRecords()))\n    if counts[\"licenses\"] == 0:\n        await write(SyncRecordsRequest(licenses=LicenseRecords()))\n\n    usage = await asyncio.to_thread(fetch_usage, access_token, user_ids)\n    for start in range(0, len(usage), USAGE_RECORDS_PER_WRITE):\n        await write(SyncRecordsRequest(usage=UsageRecords(records=usage[start : start + USAGE_RECORDS_PER_WRITE])))\n    counts[\"usage\"] = len(usage)\n    return counts\n\n\nasync def run_batch(sync: Callable[[Write], Awaitable[dict[str, int]]]) -> dict[str, int]:\n    options = SyncApiClientOptions(\n        endpoint=os.environ[\"VIIO_SYNC_API_ENDPOINT\"],\n        authentication=SyncApiAuthentication.api_key(os.environ[\"VIIO_SYNC_API_KEY\"]),\n    )\n\n    async with SyncApiClient(options) as client:\n        batch = await client.start_batch(os.environ[\"VIIO_DIRECT_INTEGRATION_INSTALLATION_ID\"])\n        try:\n            counts = await sync(batch.write)\n            await batch.complete()\n        except BaseException:\n            await batch.abort()\n            raise\n    return counts\n\n\nasync def print_request(request: SyncRecordsRequest) -> None:\n    print(MessageToJson(request))\n\n\nasync def main() -> None:\n    parser = argparse.ArgumentParser(description=\"Sync Microsoft 365 plans, accounts, licenses, and usage to Viio\")\n    parser.add_argument(\"--dry-run\", action=\"store_true\", help=\"print the records instead of sending them\")\n    arguments = parser.parse_args()\n\n    counts = await (sync_microsoft_licenses(print_request) if arguments.dry_run else run_batch(sync_microsoft_licenses))\n    logger.info(\"Synced %s\", counts)\n\n\nif __name__ == \"__main__\":\n    logging.basicConfig(level=logging.INFO)\n    asyncio.run(main())\n","python","",[147,433,434,447,455,463,471,479,487,495,509,535,548,566,588,610,617,640,661,684,702,711,719,727,735,743,751,759,767,775,783,791,799,807,815,823,831,837,842,868,894,899,917,932,957,963,985,1006,1012,1017,1027,1038,1043,1058,1097,1112,1123,1135,1147,1159,1171,1183,1195,1207,1219,1231,1236,1248,1253,1281,1286,1291,1331,1365,1388,1412,1432,1441,1446,1451,1468,1496,1511,1555,1574,1579,1591,1614,1627,1633,1655,1685,1714,1735,1741,1753,1781,1798,1804,1835,1865,1883,1891,1896,1901,1963,1980,2023,2041,2046,2058,2066,2074,2083,2104,2132,2138,2144,2149,2175,2232,2250,2255,2280,2314,2331,2343,2348,2353,2398,2429,2448,2463,2487,2505,2513,2518,2523,2560,2575,2610,2638,2670,2705,2710,2715,2757,2779,2807,2832,2840,2845,2850,2892,2911,2944,2949,2954,2997,3016,3059,3064,3069,3111,3130,3155,3160,3165,3209,3228,3239,3247,3261,3278,3286,3291,3296,3340,3359,3412,3417,3422,3474,3493,3542,3547,3552,3587,3596,3623,3648,3673,3698,3703,3708,3713,3747,3756,3782,3807,3833,3859,3884,3909,3934,3959,4001,4026,4051,4076,4102,4107,4112,4117,4153,4179,4199,4206,4216,4241,4266,4291,4316,4321,4326,4331,4341,4361,4387,4399,4423,4432,4444,4457,4481,4506,4531,4555,4580,4605,4622,4661,4687,4717,4722,4727,4732,4737,4773,4781,4802,4819,4838,4844,4865,4873,4878,4912,4928,4952,4966,4998,5006,5011,5016,5044,5060,5081,5089,5106,5120,5148,5154,5159,5164,5198,5223,5232,5244,5268,5293,5337,5362,5387,5392,5397,5402,5407,5460,5484,5505,5532,5556,5595,5609,5621,5629,5641,5674,5686,5698,5707,5713,5719,5725,5733,5738,5743,5786,5798,5826,5835,5846,5885,5897,5909,5922,5927,5932,5937,5942,5981,5988,6020,6043,6066,6071,6076,6081,6117,6141,6152,6159,6166,6185,6207,6237,6242,6247,6252,6262,6278,6298,6326,6341,6361,6372,6387,6433,6445,6457,6465,6490,6500,6530,6538,6543,6548,6592,6599,6620,6641,6654,6671,6676,6696,6703,6710,6734,6756,6761,6766,6771,6809,6835,6862,6896,6948,6953,7020,7043,7061,7074,7110,7125,7149,7164,7200,7205,7234,7244,7275,7302,7307,7349,7359,7389,7414,7419,7444,7467,7490,7511,7516,7547,7580,7625,7651,7659,7664,7669,7726,7739,7765,7801,7806,7811,7836,7873,7881,7905,7920,7931,7945,7950,7957,7962,7967,7992,8009,8014,8019,8035,8067,8117,8135,8140,8182,8211,8216,8221,8240,8268],{"__ignoreMap":431},[435,436,439,443],"span",{"class":437,"line":438},"line",1,[435,440,442],{"class":441},"s7zQu","import",[435,444,446],{"class":445},"sTEyZ"," argparse\n",[435,448,450,452],{"class":437,"line":449},2,[435,451,442],{"class":441},[435,453,454],{"class":445}," asyncio\n",[435,456,458,460],{"class":437,"line":457},3,[435,459,442],{"class":441},[435,461,462],{"class":445}," csv\n",[435,464,466,468],{"class":437,"line":465},4,[435,467,442],{"class":441},[435,469,470],{"class":445}," io\n",[435,472,474,476],{"class":437,"line":473},5,[435,475,442],{"class":441},[435,477,478],{"class":445}," json\n",[435,480,482,484],{"class":437,"line":481},6,[435,483,442],{"class":441},[435,485,486],{"class":445}," logging\n",[435,488,490,492],{"class":437,"line":489},7,[435,491,442],{"class":441},[435,493,494],{"class":445}," os\n",[435,496,498,501,504,506],{"class":437,"line":497},8,[435,499,500],{"class":441},"from",[435,502,503],{"class":445}," collections ",[435,505,442],{"class":441},[435,507,508],{"class":445}," defaultdict\n",[435,510,512,514,517,521,524,526,529,532],{"class":437,"line":511},9,[435,513,500],{"class":441},[435,515,516],{"class":445}," collections",[435,518,520],{"class":519},"sMK4o",".",[435,522,523],{"class":445},"abc ",[435,525,442],{"class":441},[435,527,528],{"class":445}," Awaitable",[435,530,531],{"class":519},",",[435,533,534],{"class":445}," Callable\n",[435,536,538,540,543,545],{"class":437,"line":537},10,[435,539,500],{"class":441},[435,541,542],{"class":445}," typing ",[435,544,442],{"class":441},[435,546,547],{"class":445}," Any\n",[435,549,551,553,556,558,561,563],{"class":437,"line":550},11,[435,552,500],{"class":441},[435,554,555],{"class":445}," urllib",[435,557,520],{"class":519},[435,559,560],{"class":445},"error ",[435,562,442],{"class":441},[435,564,565],{"class":445}," HTTPError\n",[435,567,569,571,573,575,578,580,583,585],{"class":437,"line":568},12,[435,570,500],{"class":441},[435,572,555],{"class":445},[435,574,520],{"class":519},[435,576,577],{"class":445},"parse ",[435,579,442],{"class":441},[435,581,582],{"class":445}," urlencode",[435,584,531],{"class":519},[435,586,587],{"class":445}," urlsplit\n",[435,589,591,593,595,597,600,602,605,607],{"class":437,"line":590},13,[435,592,500],{"class":441},[435,594,555],{"class":445},[435,596,520],{"class":519},[435,598,599],{"class":445},"request ",[435,601,442],{"class":441},[435,603,604],{"class":445}," Request",[435,606,531],{"class":519},[435,608,609],{"class":445}," urlopen\n",[435,611,613],{"class":437,"line":612},14,[435,614,616],{"emptyLinePlaceholder":615},true,"\n",[435,618,620,622,625,627,630,632,635,637],{"class":437,"line":619},15,[435,621,500],{"class":441},[435,623,624],{"class":445}," google",[435,626,520],{"class":519},[435,628,629],{"class":445},"protobuf",[435,631,520],{"class":519},[435,633,634],{"class":445},"json_format ",[435,636,442],{"class":441},[435,638,639],{"class":445}," MessageToJson\n",[435,641,643,645,647,649,651,653,656,658],{"class":437,"line":642},16,[435,644,500],{"class":441},[435,646,624],{"class":445},[435,648,520],{"class":519},[435,650,629],{"class":445},[435,652,520],{"class":519},[435,654,655],{"class":445},"timestamp_pb2 ",[435,657,442],{"class":441},[435,659,660],{"class":445}," Timestamp\n",[435,662,664,666,669,671,674,676,679,681],{"class":437,"line":663},17,[435,665,500],{"class":441},[435,667,668],{"class":445}," viio_sync_api ",[435,670,442],{"class":441},[435,672,673],{"class":445}," SyncApiAuthentication",[435,675,531],{"class":519},[435,677,678],{"class":445}," SyncApiClient",[435,680,531],{"class":519},[435,682,683],{"class":445}," SyncApiClientOptions\n",[435,685,687,689,692,694,697,699],{"class":437,"line":686},18,[435,688,500],{"class":441},[435,690,691],{"class":445}," viio_sync_api",[435,693,520],{"class":519},[435,695,696],{"class":445},"v1 ",[435,698,442],{"class":441},[435,700,701],{"class":519}," (\n",[435,703,705,708],{"class":437,"line":704},19,[435,706,707],{"class":445},"    Account",[435,709,710],{"class":519},",\n",[435,712,714,717],{"class":437,"line":713},20,[435,715,716],{"class":445},"    AccountRecords",[435,718,710],{"class":519},[435,720,722,725],{"class":437,"line":721},21,[435,723,724],{"class":445},"    GenericAccountDetails",[435,726,710],{"class":519},[435,728,730,733],{"class":437,"line":729},22,[435,731,732],{"class":445},"    GenericLicenseDetails",[435,734,710],{"class":519},[435,736,738,741],{"class":437,"line":737},23,[435,739,740],{"class":445},"    GenericUsageDetails",[435,742,710],{"class":519},[435,744,746,749],{"class":437,"line":745},24,[435,747,748],{"class":445},"    License",[435,750,710],{"class":519},[435,752,754,757],{"class":437,"line":753},25,[435,755,756],{"class":445},"    LicenseRecords",[435,758,710],{"class":519},[435,760,762,765],{"class":437,"line":761},26,[435,763,764],{"class":445},"    MicrosoftCompanySubscription",[435,766,710],{"class":519},[435,768,770,773],{"class":437,"line":769},27,[435,771,772],{"class":445},"    MicrosoftLicenseUnitsDetail",[435,774,710],{"class":519},[435,776,778,781],{"class":437,"line":777},28,[435,779,780],{"class":445},"    MicrosoftPlanDetails",[435,782,710],{"class":519},[435,784,786,789],{"class":437,"line":785},29,[435,787,788],{"class":445},"    MicrosoftServicePlanInfo",[435,790,710],{"class":519},[435,792,794,797],{"class":437,"line":793},30,[435,795,796],{"class":445},"    Plan",[435,798,710],{"class":519},[435,800,802,805],{"class":437,"line":801},31,[435,803,804],{"class":445},"    PlanRecords",[435,806,710],{"class":519},[435,808,810,813],{"class":437,"line":809},32,[435,811,812],{"class":445},"    SyncRecordsRequest",[435,814,710],{"class":519},[435,816,818,821],{"class":437,"line":817},33,[435,819,820],{"class":445},"    Usage",[435,822,710],{"class":519},[435,824,826,829],{"class":437,"line":825},34,[435,827,828],{"class":445},"    UsageRecords",[435,830,710],{"class":519},[435,832,834],{"class":437,"line":833},35,[435,835,836],{"class":519},")\n",[435,838,840],{"class":437,"line":839},36,[435,841,616],{"emptyLinePlaceholder":615},[435,843,845,848,851,854,857,860,863,865],{"class":437,"line":844},37,[435,846,847],{"class":445},"Write ",[435,849,850],{"class":519},"=",[435,852,853],{"class":445}," Callable",[435,855,856],{"class":519},"[[",[435,858,859],{"class":445},"SyncRecordsRequest",[435,861,862],{"class":519},"],",[435,864,528],{"class":445},[435,866,867],{"class":519},"[None]]\n",[435,869,871,874,876,879,882,886,888,891],{"class":437,"line":870},38,[435,872,873],{"class":445},"ReportRow ",[435,875,850],{"class":519},[435,877,878],{"class":445}," dict",[435,880,881],{"class":519},"[",[435,883,885],{"class":884},"sBMFI","str",[435,887,531],{"class":519},[435,889,890],{"class":884}," str",[435,892,893],{"class":519},"]\n",[435,895,897],{"class":437,"line":896},39,[435,898,616],{"emptyLinePlaceholder":615},[435,900,902,905,907,910,914],{"class":437,"line":901},40,[435,903,904],{"class":445},"GRAPH_SUBSCRIBED_SKUS_URL ",[435,906,850],{"class":519},[435,908,909],{"class":519}," \"",[435,911,913],{"class":912},"sfazB","https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002FsubscribedSkus",[435,915,916],{"class":519},"\"\n",[435,918,920,923,925,927,930],{"class":437,"line":919},41,[435,921,922],{"class":445},"GRAPH_SUBSCRIPTIONS_URL ",[435,924,850],{"class":519},[435,926,909],{"class":519},[435,928,929],{"class":912},"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Fdirectory\u002Fsubscriptions",[435,931,916],{"class":519},[435,933,935,938,940,942,945,948,951,954],{"class":437,"line":934},42,[435,936,937],{"class":445},"GRAPH_USERS_URL ",[435,939,850],{"class":519},[435,941,909],{"class":519},[435,943,944],{"class":912},"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Fusers?",[435,946,947],{"class":519},"\"",[435,949,950],{"class":519}," +",[435,952,582],{"class":953},"s2Zo4",[435,955,956],{"class":519},"(\n",[435,958,960],{"class":437,"line":959},43,[435,961,962],{"class":519},"    {\n",[435,964,966,969,972,974,976,978,981,983],{"class":437,"line":965},44,[435,967,968],{"class":519},"        \"",[435,970,971],{"class":912},"$select",[435,973,947],{"class":519},[435,975,252],{"class":519},[435,977,909],{"class":519},[435,979,980],{"class":912},"id,displayName,mail,userPrincipalName,accountEnabled,userType,assignedLicenses",[435,982,947],{"class":519},[435,984,710],{"class":519},[435,986,988,990,993,995,997,999,1002,1004],{"class":437,"line":987},45,[435,989,968],{"class":519},[435,991,992],{"class":912},"$top",[435,994,947],{"class":519},[435,996,252],{"class":519},[435,998,909],{"class":519},[435,1000,1001],{"class":912},"999",[435,1003,947],{"class":519},[435,1005,710],{"class":519},[435,1007,1009],{"class":437,"line":1008},46,[435,1010,1011],{"class":519},"    }\n",[435,1013,1015],{"class":437,"line":1014},47,[435,1016,836],{"class":519},[435,1018,1020,1023,1025],{"class":437,"line":1019},48,[435,1021,1022],{"class":445},"GRAPH_ACTIVE_USERS_REPORT_URL ",[435,1024,850],{"class":519},[435,1026,701],{"class":519},[435,1028,1030,1033,1036],{"class":437,"line":1029},49,[435,1031,1032],{"class":519},"    \"",[435,1034,1035],{"class":912},"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Freports\u002FgetOffice365ActiveUserDetail(period='D180')",[435,1037,916],{"class":519},[435,1039,1041],{"class":437,"line":1040},50,[435,1042,836],{"class":519},[435,1044,1046,1049,1051,1053,1056],{"class":437,"line":1045},51,[435,1047,1048],{"class":445},"GRAPH_APPS_REPORT_URL ",[435,1050,850],{"class":519},[435,1052,909],{"class":519},[435,1054,1055],{"class":912},"https:\u002F\u002Fgraph.microsoft.com\u002Fv1.0\u002Freports\u002FgetM365AppUserDetail(period='D180')",[435,1057,916],{"class":519},[435,1059,1061,1064,1066,1069,1071,1074,1076,1078,1080,1083,1085,1087,1089,1092,1094],{"class":437,"line":1060},52,[435,1062,1063],{"class":445},"SKIPPED_CAPABILITY_STATUSES ",[435,1065,850],{"class":519},[435,1067,1068],{"class":519}," {",[435,1070,947],{"class":519},[435,1072,1073],{"class":912},"Suspended",[435,1075,947],{"class":519},[435,1077,531],{"class":519},[435,1079,909],{"class":519},[435,1081,1082],{"class":912},"Deleted",[435,1084,947],{"class":519},[435,1086,531],{"class":519},[435,1088,909],{"class":519},[435,1090,1091],{"class":912},"LockedOut",[435,1093,947],{"class":519},[435,1095,1096],{"class":519},"}\n",[435,1098,1100,1103,1105,1107,1110],{"class":437,"line":1099},53,[435,1101,1102],{"class":445},"LAST_ACTIVITY_COLUMN_SUFFIX ",[435,1104,850],{"class":519},[435,1106,909],{"class":519},[435,1108,1109],{"class":912}," Last Activity Date",[435,1111,916],{"class":519},[435,1113,1115,1118,1120],{"class":437,"line":1114},54,[435,1116,1117],{"class":445},"APPS_REPORT_NON_APP_COLUMNS ",[435,1119,850],{"class":519},[435,1121,1122],{"class":519}," {\n",[435,1124,1126,1128,1131,1133],{"class":437,"line":1125},55,[435,1127,1032],{"class":519},[435,1129,1130],{"class":912},"Report Refresh Date",[435,1132,947],{"class":519},[435,1134,710],{"class":519},[435,1136,1138,1140,1143,1145],{"class":437,"line":1137},56,[435,1139,1032],{"class":519},[435,1141,1142],{"class":912},"User Principal Name",[435,1144,947],{"class":519},[435,1146,710],{"class":519},[435,1148,1150,1152,1155,1157],{"class":437,"line":1149},57,[435,1151,1032],{"class":519},[435,1153,1154],{"class":912},"Last Activation Date",[435,1156,947],{"class":519},[435,1158,710],{"class":519},[435,1160,1162,1164,1167,1169],{"class":437,"line":1161},58,[435,1163,1032],{"class":519},[435,1165,1166],{"class":912},"Last Activity Date",[435,1168,947],{"class":519},[435,1170,710],{"class":519},[435,1172,1174,1176,1179,1181],{"class":437,"line":1173},59,[435,1175,1032],{"class":519},[435,1177,1178],{"class":912},"Report Period",[435,1180,947],{"class":519},[435,1182,710],{"class":519},[435,1184,1186,1188,1191,1193],{"class":437,"line":1185},60,[435,1187,1032],{"class":519},[435,1189,1190],{"class":912},"Windows",[435,1192,947],{"class":519},[435,1194,710],{"class":519},[435,1196,1198,1200,1203,1205],{"class":437,"line":1197},61,[435,1199,1032],{"class":519},[435,1201,1202],{"class":912},"Mac",[435,1204,947],{"class":519},[435,1206,710],{"class":519},[435,1208,1210,1212,1215,1217],{"class":437,"line":1209},62,[435,1211,1032],{"class":519},[435,1213,1214],{"class":912},"Mobile",[435,1216,947],{"class":519},[435,1218,710],{"class":519},[435,1220,1222,1224,1227,1229],{"class":437,"line":1221},63,[435,1223,1032],{"class":519},[435,1225,1226],{"class":912},"Web",[435,1228,947],{"class":519},[435,1230,710],{"class":519},[435,1232,1234],{"class":437,"line":1233},64,[435,1235,1096],{"class":519},[435,1237,1239,1242,1244],{"class":437,"line":1238},65,[435,1240,1241],{"class":445},"USAGE_RECORDS_PER_WRITE ",[435,1243,850],{"class":519},[435,1245,1247],{"class":1246},"sbssI"," 1000\n",[435,1249,1251],{"class":437,"line":1250},66,[435,1252,616],{"emptyLinePlaceholder":615},[435,1254,1256,1259,1261,1264,1266,1269,1272,1274,1277,1279],{"class":437,"line":1255},67,[435,1257,1258],{"class":445},"logger ",[435,1260,850],{"class":519},[435,1262,1263],{"class":445}," logging",[435,1265,520],{"class":519},[435,1267,1268],{"class":953},"getLogger",[435,1270,1271],{"class":519},"(",[435,1273,947],{"class":519},[435,1275,1276],{"class":912},"microsoft_licenses",[435,1278,947],{"class":519},[435,1280,836],{"class":519},[435,1282,1284],{"class":437,"line":1283},68,[435,1285,616],{"emptyLinePlaceholder":615},[435,1287,1289],{"class":437,"line":1288},69,[435,1290,616],{"emptyLinePlaceholder":615},[435,1292,1294,1298,1301,1303,1307,1309,1311,1314,1317,1319,1321,1323,1325,1328],{"class":437,"line":1293},70,[435,1295,1297],{"class":1296},"spNyl","def",[435,1299,1300],{"class":953}," request_json",[435,1302,1271],{"class":519},[435,1304,1306],{"class":1305},"sHdIc","request",[435,1308,252],{"class":519},[435,1310,604],{"class":445},[435,1312,1313],{"class":519},")",[435,1315,1316],{"class":519}," ->",[435,1318,878],{"class":445},[435,1320,881],{"class":519},[435,1322,885],{"class":884},[435,1324,531],{"class":519},[435,1326,1327],{"class":445}," Any",[435,1329,1330],{"class":519},"]:\n",[435,1332,1334,1337,1340,1342,1344,1346,1349,1351,1354,1356,1359,1362],{"class":437,"line":1333},71,[435,1335,1336],{"class":441},"    with",[435,1338,1339],{"class":953}," urlopen",[435,1341,1271],{"class":519},[435,1343,1306],{"class":953},[435,1345,531],{"class":519},[435,1347,1348],{"class":1305}," timeout",[435,1350,850],{"class":519},[435,1352,1353],{"class":1246},"30",[435,1355,1313],{"class":519},[435,1357,1358],{"class":441}," as",[435,1360,1361],{"class":445}," response",[435,1363,1364],{"class":519},":\n",[435,1366,1368,1371,1373,1376,1378,1381,1383,1386],{"class":437,"line":1367},72,[435,1369,1370],{"class":445},"        payload ",[435,1372,850],{"class":519},[435,1374,1375],{"class":445}," json",[435,1377,520],{"class":519},[435,1379,1380],{"class":953},"load",[435,1382,1271],{"class":519},[435,1384,1385],{"class":953},"response",[435,1387,836],{"class":519},[435,1389,1391,1394,1397,1400,1402,1405,1407,1409],{"class":437,"line":1390},73,[435,1392,1393],{"class":441},"    if",[435,1395,1396],{"class":519}," not",[435,1398,1399],{"class":953}," isinstance",[435,1401,1271],{"class":519},[435,1403,1404],{"class":953},"payload",[435,1406,531],{"class":519},[435,1408,878],{"class":884},[435,1410,1411],{"class":519},"):\n",[435,1413,1415,1418,1421,1423,1425,1428,1430],{"class":437,"line":1414},74,[435,1416,1417],{"class":441},"        raise",[435,1419,1420],{"class":884}," RuntimeError",[435,1422,1271],{"class":519},[435,1424,947],{"class":519},[435,1426,1427],{"class":912},"Remote service returned an invalid JSON response",[435,1429,947],{"class":519},[435,1431,836],{"class":519},[435,1433,1435,1438],{"class":437,"line":1434},75,[435,1436,1437],{"class":441},"    return",[435,1439,1440],{"class":445}," payload\n",[435,1442,1444],{"class":437,"line":1443},76,[435,1445,616],{"emptyLinePlaceholder":615},[435,1447,1449],{"class":437,"line":1448},77,[435,1450,616],{"emptyLinePlaceholder":615},[435,1452,1454,1456,1459,1462,1464,1466],{"class":437,"line":1453},78,[435,1455,1297],{"class":1296},[435,1457,1458],{"class":953}," request_graph_token",[435,1460,1461],{"class":519},"()",[435,1463,1316],{"class":519},[435,1465,890],{"class":884},[435,1467,1364],{"class":519},[435,1469,1471,1474,1476,1479,1481,1485,1487,1489,1492,1494],{"class":437,"line":1470},79,[435,1472,1473],{"class":445},"    tenant_id ",[435,1475,850],{"class":519},[435,1477,1478],{"class":445}," os",[435,1480,520],{"class":519},[435,1482,1484],{"class":1483},"swJcz","environ",[435,1486,881],{"class":519},[435,1488,947],{"class":519},[435,1490,1491],{"class":912},"MICROSOFT_TENANT_ID",[435,1493,947],{"class":519},[435,1495,893],{"class":519},[435,1497,1499,1502,1504,1506,1509],{"class":437,"line":1498},80,[435,1500,1501],{"class":445},"    allowed_characters ",[435,1503,850],{"class":519},[435,1505,909],{"class":519},[435,1507,1508],{"class":912},"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-",[435,1510,916],{"class":519},[435,1512,1514,1516,1518,1521,1524,1527,1529,1532,1535,1538,1541,1544,1547,1550,1553],{"class":437,"line":1513},81,[435,1515,1393],{"class":441},[435,1517,1396],{"class":519},[435,1519,1520],{"class":445}," tenant_id ",[435,1522,1523],{"class":519},"or",[435,1525,1526],{"class":953}," any",[435,1528,1271],{"class":519},[435,1530,1531],{"class":953},"character ",[435,1533,1534],{"class":441},"not",[435,1536,1537],{"class":441}," in",[435,1539,1540],{"class":953}," allowed_characters ",[435,1542,1543],{"class":441},"for",[435,1545,1546],{"class":953}," character ",[435,1548,1549],{"class":441},"in",[435,1551,1552],{"class":953}," tenant_id",[435,1554,1411],{"class":519},[435,1556,1558,1560,1563,1565,1567,1570,1572],{"class":437,"line":1557},82,[435,1559,1417],{"class":441},[435,1561,1562],{"class":884}," ValueError",[435,1564,1271],{"class":519},[435,1566,947],{"class":519},[435,1568,1569],{"class":912},"MICROSOFT_TENANT_ID must be a tenant ID or verified domain name",[435,1571,947],{"class":519},[435,1573,836],{"class":519},[435,1575,1577],{"class":437,"line":1576},83,[435,1578,616],{"emptyLinePlaceholder":615},[435,1580,1582,1585,1587,1589],{"class":437,"line":1581},84,[435,1583,1584],{"class":445},"    request ",[435,1586,850],{"class":519},[435,1588,604],{"class":953},[435,1590,956],{"class":519},[435,1592,1594,1597,1600,1603,1606,1609,1612],{"class":437,"line":1593},85,[435,1595,1596],{"class":1296},"        f",[435,1598,1599],{"class":912},"\"https:\u002F\u002Flogin.microsoftonline.com\u002F",[435,1601,1602],{"class":1246},"{",[435,1604,1605],{"class":953},"tenant_id",[435,1607,1608],{"class":1246},"}",[435,1610,1611],{"class":912},"\u002Foauth2\u002Fv2.0\u002Ftoken\"",[435,1613,710],{"class":519},[435,1615,1617,1620,1622,1625],{"class":437,"line":1616},86,[435,1618,1619],{"class":1305},"        data",[435,1621,850],{"class":519},[435,1623,1624],{"class":953},"urlencode",[435,1626,956],{"class":519},[435,1628,1630],{"class":437,"line":1629},87,[435,1631,1632],{"class":519},"            {\n",[435,1634,1636,1639,1642,1644,1646,1648,1651,1653],{"class":437,"line":1635},88,[435,1637,1638],{"class":519},"                \"",[435,1640,1641],{"class":912},"grant_type",[435,1643,947],{"class":519},[435,1645,252],{"class":519},[435,1647,909],{"class":519},[435,1649,1650],{"class":912},"client_credentials",[435,1652,947],{"class":519},[435,1654,710],{"class":519},[435,1656,1658,1660,1663,1665,1667,1669,1671,1673,1675,1677,1680,1682],{"class":437,"line":1657},89,[435,1659,1638],{"class":519},[435,1661,1662],{"class":912},"client_id",[435,1664,947],{"class":519},[435,1666,252],{"class":519},[435,1668,1478],{"class":953},[435,1670,520],{"class":519},[435,1672,1484],{"class":1483},[435,1674,881],{"class":519},[435,1676,947],{"class":519},[435,1678,1679],{"class":912},"MICROSOFT_CLIENT_ID",[435,1681,947],{"class":519},[435,1683,1684],{"class":519},"],\n",[435,1686,1688,1690,1693,1695,1697,1699,1701,1703,1705,1707,1710,1712],{"class":437,"line":1687},90,[435,1689,1638],{"class":519},[435,1691,1692],{"class":912},"client_secret",[435,1694,947],{"class":519},[435,1696,252],{"class":519},[435,1698,1478],{"class":953},[435,1700,520],{"class":519},[435,1702,1484],{"class":1483},[435,1704,881],{"class":519},[435,1706,947],{"class":519},[435,1708,1709],{"class":912},"MICROSOFT_CLIENT_SECRET",[435,1711,947],{"class":519},[435,1713,1684],{"class":519},[435,1715,1717,1719,1722,1724,1726,1728,1731,1733],{"class":437,"line":1716},91,[435,1718,1638],{"class":519},[435,1720,1721],{"class":912},"scope",[435,1723,947],{"class":519},[435,1725,252],{"class":519},[435,1727,909],{"class":519},[435,1729,1730],{"class":912},"https:\u002F\u002Fgraph.microsoft.com\u002F.default",[435,1732,947],{"class":519},[435,1734,710],{"class":519},[435,1736,1738],{"class":437,"line":1737},92,[435,1739,1740],{"class":519},"            }\n",[435,1742,1744,1747,1750],{"class":437,"line":1743},93,[435,1745,1746],{"class":519},"        ).",[435,1748,1749],{"class":953},"encode",[435,1751,1752],{"class":519},"(),\n",[435,1754,1756,1759,1762,1764,1767,1769,1771,1773,1776,1778],{"class":437,"line":1755},94,[435,1757,1758],{"class":1305},"        headers",[435,1760,1761],{"class":519},"={",[435,1763,947],{"class":519},[435,1765,1766],{"class":912},"Content-Type",[435,1768,947],{"class":519},[435,1770,252],{"class":519},[435,1772,909],{"class":519},[435,1774,1775],{"class":912},"application\u002Fx-www-form-urlencoded",[435,1777,947],{"class":519},[435,1779,1780],{"class":519},"},\n",[435,1782,1784,1787,1789,1791,1794,1796],{"class":437,"line":1783},95,[435,1785,1786],{"class":1305},"        method",[435,1788,850],{"class":519},[435,1790,947],{"class":519},[435,1792,1793],{"class":912},"POST",[435,1795,947],{"class":519},[435,1797,710],{"class":519},[435,1799,1801],{"class":437,"line":1800},96,[435,1802,1803],{"class":519},"    )\n",[435,1805,1807,1810,1812,1814,1816,1818,1821,1824,1826,1828,1831,1833],{"class":437,"line":1806},97,[435,1808,1809],{"class":445},"    token ",[435,1811,850],{"class":519},[435,1813,1300],{"class":953},[435,1815,1271],{"class":519},[435,1817,1306],{"class":953},[435,1819,1820],{"class":519},").",[435,1822,1823],{"class":953},"get",[435,1825,1271],{"class":519},[435,1827,947],{"class":519},[435,1829,1830],{"class":912},"access_token",[435,1832,947],{"class":519},[435,1834,836],{"class":519},[435,1836,1838,1840,1842,1844,1846,1849,1851,1853,1855,1858,1860,1863],{"class":437,"line":1837},98,[435,1839,1393],{"class":441},[435,1841,1396],{"class":519},[435,1843,1399],{"class":953},[435,1845,1271],{"class":519},[435,1847,1848],{"class":953},"token",[435,1850,531],{"class":519},[435,1852,890],{"class":884},[435,1854,1313],{"class":519},[435,1856,1857],{"class":519}," or",[435,1859,1396],{"class":519},[435,1861,1862],{"class":445}," token",[435,1864,1364],{"class":519},[435,1866,1868,1870,1872,1874,1876,1879,1881],{"class":437,"line":1867},99,[435,1869,1417],{"class":441},[435,1871,1420],{"class":884},[435,1873,1271],{"class":519},[435,1875,947],{"class":519},[435,1877,1878],{"class":912},"Microsoft identity platform returned no access token",[435,1880,947],{"class":519},[435,1882,836],{"class":519},[435,1884,1886,1888],{"class":437,"line":1885},100,[435,1887,1437],{"class":441},[435,1889,1890],{"class":445}," token\n",[435,1892,1894],{"class":437,"line":1893},101,[435,1895,616],{"emptyLinePlaceholder":615},[435,1897,1899],{"class":437,"line":1898},102,[435,1900,616],{"emptyLinePlaceholder":615},[435,1902,1904,1906,1909,1911,1914,1916,1918,1920,1923,1925,1927,1929,1931,1934,1936,1939,1941,1944,1946,1948,1950,1952,1955,1957,1960],{"class":437,"line":1903},103,[435,1905,1297],{"class":1296},[435,1907,1908],{"class":953}," request_graph_page",[435,1910,1271],{"class":519},[435,1912,1913],{"class":1305},"url",[435,1915,252],{"class":519},[435,1917,890],{"class":884},[435,1919,531],{"class":519},[435,1921,1922],{"class":1305}," access_token",[435,1924,252],{"class":519},[435,1926,890],{"class":884},[435,1928,1313],{"class":519},[435,1930,1316],{"class":519},[435,1932,1933],{"class":445}," tuple",[435,1935,881],{"class":519},[435,1937,1938],{"class":445},"list",[435,1940,881],{"class":519},[435,1942,1943],{"class":445},"dict",[435,1945,881],{"class":519},[435,1947,885],{"class":884},[435,1949,531],{"class":519},[435,1951,1327],{"class":445},[435,1953,1954],{"class":519},"]],",[435,1956,890],{"class":884},[435,1958,1959],{"class":519}," |",[435,1961,1962],{"class":519}," None]:\n",[435,1964,1966,1969,1971,1974,1976,1978],{"class":437,"line":1965},104,[435,1967,1968],{"class":445},"    parsed_url ",[435,1970,850],{"class":519},[435,1972,1973],{"class":953}," urlsplit",[435,1975,1271],{"class":519},[435,1977,1913],{"class":953},[435,1979,836],{"class":519},[435,1981,1983,1985,1988,1990,1993,1996,1998,2001,2003,2005,2007,2009,2012,2014,2016,2019,2021],{"class":437,"line":1982},105,[435,1984,1393],{"class":441},[435,1986,1987],{"class":445}," parsed_url",[435,1989,520],{"class":519},[435,1991,1992],{"class":1483},"scheme",[435,1994,1995],{"class":519}," !=",[435,1997,909],{"class":519},[435,1999,2000],{"class":912},"https",[435,2002,947],{"class":519},[435,2004,1857],{"class":519},[435,2006,1987],{"class":445},[435,2008,520],{"class":519},[435,2010,2011],{"class":1483},"hostname",[435,2013,1995],{"class":519},[435,2015,909],{"class":519},[435,2017,2018],{"class":912},"graph.microsoft.com",[435,2020,947],{"class":519},[435,2022,1364],{"class":519},[435,2024,2026,2028,2030,2032,2034,2037,2039],{"class":437,"line":2025},106,[435,2027,1417],{"class":441},[435,2029,1420],{"class":884},[435,2031,1271],{"class":519},[435,2033,947],{"class":519},[435,2035,2036],{"class":912},"Microsoft Graph returned an invalid pagination URL",[435,2038,947],{"class":519},[435,2040,836],{"class":519},[435,2042,2044],{"class":437,"line":2043},107,[435,2045,616],{"emptyLinePlaceholder":615},[435,2047,2049,2052,2054,2056],{"class":437,"line":2048},108,[435,2050,2051],{"class":445},"    payload ",[435,2053,850],{"class":519},[435,2055,1300],{"class":953},[435,2057,956],{"class":519},[435,2059,2061,2064],{"class":437,"line":2060},109,[435,2062,2063],{"class":953},"        Request",[435,2065,956],{"class":519},[435,2067,2069,2072],{"class":437,"line":2068},110,[435,2070,2071],{"class":953},"            url",[435,2073,710],{"class":519},[435,2075,2077,2080],{"class":437,"line":2076},111,[435,2078,2079],{"class":1305},"            headers",[435,2081,2082],{"class":519},"={\n",[435,2084,2086,2088,2091,2093,2095,2097,2100,2102],{"class":437,"line":2085},112,[435,2087,1638],{"class":519},[435,2089,2090],{"class":912},"Accept",[435,2092,947],{"class":519},[435,2094,252],{"class":519},[435,2096,909],{"class":519},[435,2098,2099],{"class":912},"application\u002Fjson",[435,2101,947],{"class":519},[435,2103,710],{"class":519},[435,2105,2107,2109,2112,2114,2116,2119,2122,2124,2126,2128,2130],{"class":437,"line":2106},113,[435,2108,1638],{"class":519},[435,2110,2111],{"class":912},"Authorization",[435,2113,947],{"class":519},[435,2115,252],{"class":519},[435,2117,2118],{"class":1296}," f",[435,2120,2121],{"class":912},"\"Bearer ",[435,2123,1602],{"class":1246},[435,2125,1830],{"class":953},[435,2127,1608],{"class":1246},[435,2129,947],{"class":912},[435,2131,710],{"class":519},[435,2133,2135],{"class":437,"line":2134},114,[435,2136,2137],{"class":519},"            },\n",[435,2139,2141],{"class":437,"line":2140},115,[435,2142,2143],{"class":519},"        )\n",[435,2145,2147],{"class":437,"line":2146},116,[435,2148,1803],{"class":519},[435,2150,2152,2155,2157,2160,2162,2164,2166,2168,2171,2173],{"class":437,"line":2151},117,[435,2153,2154],{"class":445},"    items ",[435,2156,850],{"class":519},[435,2158,2159],{"class":445}," payload",[435,2161,520],{"class":519},[435,2163,1823],{"class":953},[435,2165,1271],{"class":519},[435,2167,947],{"class":519},[435,2169,2170],{"class":912},"value",[435,2172,947],{"class":519},[435,2174,836],{"class":519},[435,2176,2178,2180,2182,2184,2186,2189,2191,2194,2196,2198,2200,2203,2205,2208,2210,2213,2215,2217,2219,2222,2225,2227,2230],{"class":437,"line":2177},118,[435,2179,1393],{"class":441},[435,2181,1396],{"class":519},[435,2183,1399],{"class":953},[435,2185,1271],{"class":519},[435,2187,2188],{"class":953},"items",[435,2190,531],{"class":519},[435,2192,2193],{"class":884}," list",[435,2195,1313],{"class":519},[435,2197,1857],{"class":519},[435,2199,1396],{"class":519},[435,2201,2202],{"class":953}," all",[435,2204,1271],{"class":519},[435,2206,2207],{"class":953},"isinstance",[435,2209,1271],{"class":519},[435,2211,2212],{"class":953},"item",[435,2214,531],{"class":519},[435,2216,878],{"class":884},[435,2218,1313],{"class":519},[435,2220,2221],{"class":441}," for",[435,2223,2224],{"class":953}," item ",[435,2226,1549],{"class":441},[435,2228,2229],{"class":953}," items",[435,2231,1411],{"class":519},[435,2233,2235,2237,2239,2241,2243,2246,2248],{"class":437,"line":2234},119,[435,2236,1417],{"class":441},[435,2238,1420],{"class":884},[435,2240,1271],{"class":519},[435,2242,947],{"class":519},[435,2244,2245],{"class":912},"Microsoft Graph returned an invalid collection response",[435,2247,947],{"class":519},[435,2249,836],{"class":519},[435,2251,2253],{"class":437,"line":2252},120,[435,2254,616],{"emptyLinePlaceholder":615},[435,2256,2258,2261,2263,2265,2267,2269,2271,2273,2276,2278],{"class":437,"line":2257},121,[435,2259,2260],{"class":445},"    next_url ",[435,2262,850],{"class":519},[435,2264,2159],{"class":445},[435,2266,520],{"class":519},[435,2268,1823],{"class":953},[435,2270,1271],{"class":519},[435,2272,947],{"class":519},[435,2274,2275],{"class":912},"@odata.nextLink",[435,2277,947],{"class":519},[435,2279,836],{"class":519},[435,2281,2283,2285,2288,2291,2293,2296,2299,2301,2303,2305,2308,2310,2312],{"class":437,"line":2282},122,[435,2284,1393],{"class":441},[435,2286,2287],{"class":445}," next_url ",[435,2289,2290],{"class":519},"is",[435,2292,1396],{"class":519},[435,2294,2295],{"class":519}," None",[435,2297,2298],{"class":519}," and",[435,2300,1396],{"class":519},[435,2302,1399],{"class":953},[435,2304,1271],{"class":519},[435,2306,2307],{"class":953},"next_url",[435,2309,531],{"class":519},[435,2311,890],{"class":884},[435,2313,1411],{"class":519},[435,2315,2317,2319,2321,2323,2325,2327,2329],{"class":437,"line":2316},123,[435,2318,1417],{"class":441},[435,2320,1420],{"class":884},[435,2322,1271],{"class":519},[435,2324,947],{"class":519},[435,2326,2036],{"class":912},[435,2328,947],{"class":519},[435,2330,836],{"class":519},[435,2332,2334,2336,2338,2340],{"class":437,"line":2333},124,[435,2335,1437],{"class":441},[435,2337,2229],{"class":445},[435,2339,531],{"class":519},[435,2341,2342],{"class":445}," next_url\n",[435,2344,2346],{"class":437,"line":2345},125,[435,2347,616],{"emptyLinePlaceholder":615},[435,2349,2351],{"class":437,"line":2350},126,[435,2352,616],{"emptyLinePlaceholder":615},[435,2354,2356,2358,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395],{"class":437,"line":2355},127,[435,2357,1297],{"class":1296},[435,2359,2360],{"class":953}," request_graph_collection",[435,2362,1271],{"class":519},[435,2364,1913],{"class":1305},[435,2366,252],{"class":519},[435,2368,890],{"class":884},[435,2370,531],{"class":519},[435,2372,1922],{"class":1305},[435,2374,252],{"class":519},[435,2376,890],{"class":884},[435,2378,1313],{"class":519},[435,2380,1316],{"class":519},[435,2382,2193],{"class":445},[435,2384,881],{"class":519},[435,2386,1943],{"class":445},[435,2388,881],{"class":519},[435,2390,885],{"class":884},[435,2392,531],{"class":519},[435,2394,1327],{"class":445},[435,2396,2397],{"class":519},"]]:\n",[435,2399,2401,2404,2406,2408,2410,2412,2414,2416,2418,2420,2423,2426],{"class":437,"line":2400},128,[435,2402,2403],{"class":445},"    items",[435,2405,252],{"class":519},[435,2407,2193],{"class":445},[435,2409,881],{"class":519},[435,2411,1943],{"class":445},[435,2413,881],{"class":519},[435,2415,885],{"class":884},[435,2417,531],{"class":519},[435,2419,1327],{"class":445},[435,2421,2422],{"class":519},"]]",[435,2424,2425],{"class":519}," =",[435,2427,2428],{"class":519}," []\n",[435,2430,2432,2435,2437,2439,2441,2443,2445],{"class":437,"line":2431},129,[435,2433,2434],{"class":445},"    next_url",[435,2436,252],{"class":519},[435,2438,890],{"class":884},[435,2440,1959],{"class":519},[435,2442,2295],{"class":519},[435,2444,2425],{"class":519},[435,2446,2447],{"class":445}," url\n",[435,2449,2451,2454,2456,2458,2460],{"class":437,"line":2450},130,[435,2452,2453],{"class":441},"    while",[435,2455,2287],{"class":445},[435,2457,2290],{"class":519},[435,2459,1396],{"class":519},[435,2461,2462],{"class":519}," None:\n",[435,2464,2466,2469,2471,2473,2475,2477,2479,2481,2483,2485],{"class":437,"line":2465},131,[435,2467,2468],{"class":445},"        page",[435,2470,531],{"class":519},[435,2472,2287],{"class":445},[435,2474,850],{"class":519},[435,2476,1908],{"class":953},[435,2478,1271],{"class":519},[435,2480,2307],{"class":953},[435,2482,531],{"class":519},[435,2484,1922],{"class":953},[435,2486,836],{"class":519},[435,2488,2490,2493,2495,2498,2500,2503],{"class":437,"line":2489},132,[435,2491,2492],{"class":445},"        items",[435,2494,520],{"class":519},[435,2496,2497],{"class":953},"extend",[435,2499,1271],{"class":519},[435,2501,2502],{"class":953},"page",[435,2504,836],{"class":519},[435,2506,2508,2510],{"class":437,"line":2507},133,[435,2509,1437],{"class":441},[435,2511,2512],{"class":445}," items\n",[435,2514,2516],{"class":437,"line":2515},134,[435,2517,616],{"emptyLinePlaceholder":615},[435,2519,2521],{"class":437,"line":2520},135,[435,2522,616],{"emptyLinePlaceholder":615},[435,2524,2526,2528,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2558],{"class":437,"line":2525},136,[435,2527,1297],{"class":1296},[435,2529,2530],{"class":953}," request_graph_report",[435,2532,1271],{"class":519},[435,2534,1913],{"class":1305},[435,2536,252],{"class":519},[435,2538,890],{"class":884},[435,2540,531],{"class":519},[435,2542,1922],{"class":1305},[435,2544,252],{"class":519},[435,2546,890],{"class":884},[435,2548,1313],{"class":519},[435,2550,1316],{"class":519},[435,2552,2193],{"class":445},[435,2554,881],{"class":519},[435,2556,2557],{"class":445},"ReportRow",[435,2559,1330],{"class":519},[435,2561,2563,2565,2567,2569,2571,2573],{"class":437,"line":2562},137,[435,2564,1584],{"class":445},[435,2566,850],{"class":519},[435,2568,604],{"class":953},[435,2570,1271],{"class":519},[435,2572,1913],{"class":953},[435,2574,836],{"class":519},[435,2576,2578,2581,2583,2586,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608],{"class":437,"line":2577},138,[435,2579,2580],{"class":445},"    request",[435,2582,520],{"class":519},[435,2584,2585],{"class":953},"add_unredirected_header",[435,2587,1271],{"class":519},[435,2589,947],{"class":519},[435,2591,2111],{"class":912},[435,2593,947],{"class":519},[435,2595,531],{"class":519},[435,2597,2118],{"class":1296},[435,2599,2121],{"class":912},[435,2601,1602],{"class":1246},[435,2603,1830],{"class":953},[435,2605,1608],{"class":1246},[435,2607,947],{"class":912},[435,2609,836],{"class":519},[435,2611,2613,2615,2617,2619,2621,2623,2625,2627,2630,2632,2634,2636],{"class":437,"line":2612},139,[435,2614,1336],{"class":441},[435,2616,1339],{"class":953},[435,2618,1271],{"class":519},[435,2620,1306],{"class":953},[435,2622,531],{"class":519},[435,2624,1348],{"class":1305},[435,2626,850],{"class":519},[435,2628,2629],{"class":1246},"300",[435,2631,1313],{"class":519},[435,2633,1358],{"class":441},[435,2635,1361],{"class":445},[435,2637,1364],{"class":519},[435,2639,2641,2644,2646,2648,2650,2653,2656,2659,2661,2663,2666,2668],{"class":437,"line":2640},140,[435,2642,2643],{"class":445},"        content ",[435,2645,850],{"class":519},[435,2647,1361],{"class":445},[435,2649,520],{"class":519},[435,2651,2652],{"class":953},"read",[435,2654,2655],{"class":519},"().",[435,2657,2658],{"class":953},"decode",[435,2660,1271],{"class":519},[435,2662,947],{"class":519},[435,2664,2665],{"class":912},"utf-8-sig",[435,2667,947],{"class":519},[435,2669,836],{"class":519},[435,2671,2673,2675,2677,2679,2682,2684,2687,2689,2692,2694,2697,2699,2702],{"class":437,"line":2672},141,[435,2674,1437],{"class":441},[435,2676,2193],{"class":884},[435,2678,1271],{"class":519},[435,2680,2681],{"class":953},"csv",[435,2683,520],{"class":519},[435,2685,2686],{"class":953},"DictReader",[435,2688,1271],{"class":519},[435,2690,2691],{"class":953},"io",[435,2693,520],{"class":519},[435,2695,2696],{"class":953},"StringIO",[435,2698,1271],{"class":519},[435,2700,2701],{"class":953},"content",[435,2703,2704],{"class":519},")))\n",[435,2706,2708],{"class":437,"line":2707},142,[435,2709,616],{"emptyLinePlaceholder":615},[435,2711,2713],{"class":437,"line":2712},143,[435,2714,616],{"emptyLinePlaceholder":615},[435,2716,2718,2720,2723,2725,2728,2730,2732,2734,2736,2738,2740,2742,2745,2747,2749,2751,2753,2755],{"class":437,"line":2717},144,[435,2719,1297],{"class":1296},[435,2721,2722],{"class":953}," required_string",[435,2724,1271],{"class":519},[435,2726,2727],{"class":1305},"source",[435,2729,252],{"class":519},[435,2731,878],{"class":445},[435,2733,881],{"class":519},[435,2735,885],{"class":884},[435,2737,531],{"class":519},[435,2739,1327],{"class":445},[435,2741,862],{"class":519},[435,2743,2744],{"class":1305}," field",[435,2746,252],{"class":519},[435,2748,890],{"class":884},[435,2750,1313],{"class":519},[435,2752,1316],{"class":519},[435,2754,890],{"class":884},[435,2756,1364],{"class":519},[435,2758,2760,2763,2765,2768,2770,2772,2774,2777],{"class":437,"line":2759},145,[435,2761,2762],{"class":445},"    value ",[435,2764,850],{"class":519},[435,2766,2767],{"class":445}," source",[435,2769,520],{"class":519},[435,2771,1823],{"class":953},[435,2773,1271],{"class":519},[435,2775,2776],{"class":953},"field",[435,2778,836],{"class":519},[435,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2805],{"class":437,"line":2781},146,[435,2783,1393],{"class":441},[435,2785,1396],{"class":519},[435,2787,1399],{"class":953},[435,2789,1271],{"class":519},[435,2791,2170],{"class":953},[435,2793,531],{"class":519},[435,2795,890],{"class":884},[435,2797,1313],{"class":519},[435,2799,1857],{"class":519},[435,2801,1396],{"class":519},[435,2803,2804],{"class":445}," value",[435,2806,1364],{"class":519},[435,2808,2810,2812,2814,2816,2819,2822,2824,2826,2828,2830],{"class":437,"line":2809},147,[435,2811,1417],{"class":441},[435,2813,1420],{"class":884},[435,2815,1271],{"class":519},[435,2817,2818],{"class":1296},"f",[435,2820,2821],{"class":912},"\"Microsoft Graph returned an object without ",[435,2823,1602],{"class":1246},[435,2825,2776],{"class":953},[435,2827,1608],{"class":1246},[435,2829,947],{"class":912},[435,2831,836],{"class":519},[435,2833,2835,2837],{"class":437,"line":2834},148,[435,2836,1437],{"class":441},[435,2838,2839],{"class":445}," value\n",[435,2841,2843],{"class":437,"line":2842},149,[435,2844,616],{"emptyLinePlaceholder":615},[435,2846,2848],{"class":437,"line":2847},150,[435,2849,616],{"emptyLinePlaceholder":615},[435,2851,2853,2855,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890],{"class":437,"line":2852},151,[435,2854,1297],{"class":1296},[435,2856,2857],{"class":953}," optional_string",[435,2859,1271],{"class":519},[435,2861,2727],{"class":1305},[435,2863,252],{"class":519},[435,2865,878],{"class":445},[435,2867,881],{"class":519},[435,2869,885],{"class":884},[435,2871,531],{"class":519},[435,2873,1327],{"class":445},[435,2875,862],{"class":519},[435,2877,2744],{"class":1305},[435,2879,252],{"class":519},[435,2881,890],{"class":884},[435,2883,1313],{"class":519},[435,2885,1316],{"class":519},[435,2887,890],{"class":884},[435,2889,1959],{"class":519},[435,2891,2462],{"class":519},[435,2893,2895,2897,2899,2901,2903,2905,2907,2909],{"class":437,"line":2894},152,[435,2896,2762],{"class":445},[435,2898,850],{"class":519},[435,2900,2767],{"class":445},[435,2902,520],{"class":519},[435,2904,1823],{"class":953},[435,2906,1271],{"class":519},[435,2908,2776],{"class":953},[435,2910,836],{"class":519},[435,2912,2914,2916,2919,2922,2924,2926,2928,2930,2932,2934,2936,2938,2941],{"class":437,"line":2913},153,[435,2915,1437],{"class":441},[435,2917,2918],{"class":445}," value ",[435,2920,2921],{"class":441},"if",[435,2923,1399],{"class":953},[435,2925,1271],{"class":519},[435,2927,2170],{"class":953},[435,2929,531],{"class":519},[435,2931,890],{"class":884},[435,2933,1313],{"class":519},[435,2935,2298],{"class":519},[435,2937,2918],{"class":445},[435,2939,2940],{"class":441},"else",[435,2942,2943],{"class":519}," None\n",[435,2945,2947],{"class":437,"line":2946},154,[435,2948,616],{"emptyLinePlaceholder":615},[435,2950,2952],{"class":437,"line":2951},155,[435,2953,616],{"emptyLinePlaceholder":615},[435,2955,2957,2959,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2993,2995],{"class":437,"line":2956},156,[435,2958,1297],{"class":1296},[435,2960,2961],{"class":953}," optional_int",[435,2963,1271],{"class":519},[435,2965,2727],{"class":1305},[435,2967,252],{"class":519},[435,2969,878],{"class":445},[435,2971,881],{"class":519},[435,2973,885],{"class":884},[435,2975,531],{"class":519},[435,2977,1327],{"class":445},[435,2979,862],{"class":519},[435,2981,2744],{"class":1305},[435,2983,252],{"class":519},[435,2985,890],{"class":884},[435,2987,1313],{"class":519},[435,2989,1316],{"class":519},[435,2991,2992],{"class":884}," int",[435,2994,1959],{"class":519},[435,2996,2462],{"class":519},[435,2998,3000,3002,3004,3006,3008,3010,3012,3014],{"class":437,"line":2999},157,[435,3001,2762],{"class":445},[435,3003,850],{"class":519},[435,3005,2767],{"class":445},[435,3007,520],{"class":519},[435,3009,1823],{"class":953},[435,3011,1271],{"class":519},[435,3013,2776],{"class":953},[435,3015,836],{"class":519},[435,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3052,3054,3057],{"class":437,"line":3018},158,[435,3020,1437],{"class":441},[435,3022,2918],{"class":445},[435,3024,2921],{"class":441},[435,3026,1399],{"class":953},[435,3028,1271],{"class":519},[435,3030,2170],{"class":953},[435,3032,531],{"class":519},[435,3034,2992],{"class":884},[435,3036,1313],{"class":519},[435,3038,2298],{"class":519},[435,3040,1396],{"class":519},[435,3042,1399],{"class":953},[435,3044,1271],{"class":519},[435,3046,2170],{"class":953},[435,3048,531],{"class":519},[435,3050,3051],{"class":884}," bool",[435,3053,1313],{"class":519},[435,3055,3056],{"class":441}," else",[435,3058,2943],{"class":519},[435,3060,3062],{"class":437,"line":3061},159,[435,3063,616],{"emptyLinePlaceholder":615},[435,3065,3067],{"class":437,"line":3066},160,[435,3068,616],{"emptyLinePlaceholder":615},[435,3070,3072,3074,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109],{"class":437,"line":3071},161,[435,3073,1297],{"class":1296},[435,3075,3076],{"class":953}," optional_bool",[435,3078,1271],{"class":519},[435,3080,2727],{"class":1305},[435,3082,252],{"class":519},[435,3084,878],{"class":445},[435,3086,881],{"class":519},[435,3088,885],{"class":884},[435,3090,531],{"class":519},[435,3092,1327],{"class":445},[435,3094,862],{"class":519},[435,3096,2744],{"class":1305},[435,3098,252],{"class":519},[435,3100,890],{"class":884},[435,3102,1313],{"class":519},[435,3104,1316],{"class":519},[435,3106,3051],{"class":884},[435,3108,1959],{"class":519},[435,3110,2462],{"class":519},[435,3112,3114,3116,3118,3120,3122,3124,3126,3128],{"class":437,"line":3113},162,[435,3115,2762],{"class":445},[435,3117,850],{"class":519},[435,3119,2767],{"class":445},[435,3121,520],{"class":519},[435,3123,1823],{"class":953},[435,3125,1271],{"class":519},[435,3127,2776],{"class":953},[435,3129,836],{"class":519},[435,3131,3133,3135,3137,3139,3141,3143,3145,3147,3149,3151,3153],{"class":437,"line":3132},163,[435,3134,1437],{"class":441},[435,3136,2918],{"class":445},[435,3138,2921],{"class":441},[435,3140,1399],{"class":953},[435,3142,1271],{"class":519},[435,3144,2170],{"class":953},[435,3146,531],{"class":519},[435,3148,3051],{"class":884},[435,3150,1313],{"class":519},[435,3152,3056],{"class":441},[435,3154,2943],{"class":519},[435,3156,3158],{"class":437,"line":3157},164,[435,3159,616],{"emptyLinePlaceholder":615},[435,3161,3163],{"class":437,"line":3162},165,[435,3164,616],{"emptyLinePlaceholder":615},[435,3166,3168,3170,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3204,3207],{"class":437,"line":3167},166,[435,3169,1297],{"class":1296},[435,3171,3172],{"class":953}," optional_timestamp",[435,3174,1271],{"class":519},[435,3176,2727],{"class":1305},[435,3178,252],{"class":519},[435,3180,878],{"class":445},[435,3182,881],{"class":519},[435,3184,885],{"class":884},[435,3186,531],{"class":519},[435,3188,1327],{"class":445},[435,3190,862],{"class":519},[435,3192,2744],{"class":1305},[435,3194,252],{"class":519},[435,3196,890],{"class":884},[435,3198,1313],{"class":519},[435,3200,1316],{"class":519},[435,3202,3203],{"class":445}," Timestamp ",[435,3205,3206],{"class":519},"|",[435,3208,2462],{"class":519},[435,3210,3212,3214,3216,3218,3220,3222,3224,3226],{"class":437,"line":3211},167,[435,3213,2762],{"class":445},[435,3215,850],{"class":519},[435,3217,2857],{"class":953},[435,3219,1271],{"class":519},[435,3221,2727],{"class":953},[435,3223,531],{"class":519},[435,3225,2744],{"class":953},[435,3227,836],{"class":519},[435,3229,3231,3233,3235,3237],{"class":437,"line":3230},168,[435,3232,1393],{"class":441},[435,3234,2918],{"class":445},[435,3236,2290],{"class":519},[435,3238,2462],{"class":519},[435,3240,3242,3245],{"class":437,"line":3241},169,[435,3243,3244],{"class":441},"        return",[435,3246,2943],{"class":519},[435,3248,3250,3253,3255,3258],{"class":437,"line":3249},170,[435,3251,3252],{"class":445},"    timestamp ",[435,3254,850],{"class":519},[435,3256,3257],{"class":953}," Timestamp",[435,3259,3260],{"class":519},"()\n",[435,3262,3264,3267,3269,3272,3274,3276],{"class":437,"line":3263},171,[435,3265,3266],{"class":445},"    timestamp",[435,3268,520],{"class":519},[435,3270,3271],{"class":953},"FromJsonString",[435,3273,1271],{"class":519},[435,3275,2170],{"class":953},[435,3277,836],{"class":519},[435,3279,3281,3283],{"class":437,"line":3280},172,[435,3282,1437],{"class":441},[435,3284,3285],{"class":445}," timestamp\n",[435,3287,3289],{"class":437,"line":3288},173,[435,3290,616],{"emptyLinePlaceholder":615},[435,3292,3294],{"class":437,"line":3293},174,[435,3295,616],{"emptyLinePlaceholder":615},[435,3297,3299,3301,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338],{"class":437,"line":3298},175,[435,3300,1297],{"class":1296},[435,3302,3303],{"class":953}," strings",[435,3305,1271],{"class":519},[435,3307,2727],{"class":1305},[435,3309,252],{"class":519},[435,3311,878],{"class":445},[435,3313,881],{"class":519},[435,3315,885],{"class":884},[435,3317,531],{"class":519},[435,3319,1327],{"class":445},[435,3321,862],{"class":519},[435,3323,2744],{"class":1305},[435,3325,252],{"class":519},[435,3327,890],{"class":884},[435,3329,1313],{"class":519},[435,3331,1316],{"class":519},[435,3333,2193],{"class":445},[435,3335,881],{"class":519},[435,3337,885],{"class":884},[435,3339,1330],{"class":519},[435,3341,3343,3345,3347,3349,3351,3353,3355,3357],{"class":437,"line":3342},176,[435,3344,2762],{"class":445},[435,3346,850],{"class":519},[435,3348,2767],{"class":445},[435,3350,520],{"class":519},[435,3352,1823],{"class":953},[435,3354,1271],{"class":519},[435,3356,2776],{"class":953},[435,3358,836],{"class":519},[435,3360,3362,3364,3367,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3393,3396,3398,3400,3402,3404,3406,3408,3410],{"class":437,"line":3361},177,[435,3363,1437],{"class":441},[435,3365,3366],{"class":519}," [",[435,3368,3369],{"class":445},"item ",[435,3371,1543],{"class":441},[435,3373,2224],{"class":445},[435,3375,1549],{"class":441},[435,3377,2918],{"class":445},[435,3379,2921],{"class":441},[435,3381,1399],{"class":953},[435,3383,1271],{"class":519},[435,3385,2212],{"class":953},[435,3387,531],{"class":519},[435,3389,890],{"class":884},[435,3391,3392],{"class":519},")]",[435,3394,3395],{"class":441}," if",[435,3397,1399],{"class":953},[435,3399,1271],{"class":519},[435,3401,2170],{"class":953},[435,3403,531],{"class":519},[435,3405,2193],{"class":884},[435,3407,1313],{"class":519},[435,3409,3056],{"class":441},[435,3411,2428],{"class":519},[435,3413,3415],{"class":437,"line":3414},178,[435,3416,616],{"emptyLinePlaceholder":615},[435,3418,3420],{"class":437,"line":3419},179,[435,3421,616],{"emptyLinePlaceholder":615},[435,3423,3425,3427,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472],{"class":437,"line":3424},180,[435,3426,1297],{"class":1296},[435,3428,3429],{"class":953}," objects",[435,3431,1271],{"class":519},[435,3433,2727],{"class":1305},[435,3435,252],{"class":519},[435,3437,878],{"class":445},[435,3439,881],{"class":519},[435,3441,885],{"class":884},[435,3443,531],{"class":519},[435,3445,1327],{"class":445},[435,3447,862],{"class":519},[435,3449,2744],{"class":1305},[435,3451,252],{"class":519},[435,3453,890],{"class":884},[435,3455,1313],{"class":519},[435,3457,1316],{"class":519},[435,3459,2193],{"class":445},[435,3461,881],{"class":519},[435,3463,1943],{"class":445},[435,3465,881],{"class":519},[435,3467,885],{"class":884},[435,3469,531],{"class":519},[435,3471,1327],{"class":445},[435,3473,2397],{"class":519},[435,3475,3477,3479,3481,3483,3485,3487,3489,3491],{"class":437,"line":3476},181,[435,3478,2762],{"class":445},[435,3480,850],{"class":519},[435,3482,2767],{"class":445},[435,3484,520],{"class":519},[435,3486,1823],{"class":953},[435,3488,1271],{"class":519},[435,3490,2776],{"class":953},[435,3492,836],{"class":519},[435,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540],{"class":437,"line":3495},182,[435,3497,1437],{"class":441},[435,3499,3366],{"class":519},[435,3501,3369],{"class":445},[435,3503,1543],{"class":441},[435,3505,2224],{"class":445},[435,3507,1549],{"class":441},[435,3509,2918],{"class":445},[435,3511,2921],{"class":441},[435,3513,1399],{"class":953},[435,3515,1271],{"class":519},[435,3517,2212],{"class":953},[435,3519,531],{"class":519},[435,3521,878],{"class":884},[435,3523,3392],{"class":519},[435,3525,3395],{"class":441},[435,3527,1399],{"class":953},[435,3529,1271],{"class":519},[435,3531,2170],{"class":953},[435,3533,531],{"class":519},[435,3535,2193],{"class":884},[435,3537,1313],{"class":519},[435,3539,3056],{"class":441},[435,3541,2428],{"class":519},[435,3543,3545],{"class":437,"line":3544},183,[435,3546,616],{"emptyLinePlaceholder":615},[435,3548,3550],{"class":437,"line":3549},184,[435,3551,616],{"emptyLinePlaceholder":615},[435,3553,3555,3557,3560,3562,3565,3567,3569,3571,3573,3575,3577,3580,3582,3585],{"class":437,"line":3554},185,[435,3556,1297],{"class":1296},[435,3558,3559],{"class":953}," service_plan_info",[435,3561,1271],{"class":519},[435,3563,3564],{"class":1305},"service_plan",[435,3566,252],{"class":519},[435,3568,878],{"class":445},[435,3570,881],{"class":519},[435,3572,885],{"class":884},[435,3574,531],{"class":519},[435,3576,1327],{"class":445},[435,3578,3579],{"class":519},"])",[435,3581,1316],{"class":519},[435,3583,3584],{"class":445}," MicrosoftServicePlanInfo",[435,3586,1364],{"class":519},[435,3588,3590,3592,3594],{"class":437,"line":3589},186,[435,3591,1437],{"class":441},[435,3593,3584],{"class":953},[435,3595,956],{"class":519},[435,3597,3599,3602,3604,3607,3609,3611,3613,3615,3618,3620],{"class":437,"line":3598},187,[435,3600,3601],{"class":1305},"        service_plan_id",[435,3603,850],{"class":519},[435,3605,3606],{"class":953},"optional_string",[435,3608,1271],{"class":519},[435,3610,3564],{"class":953},[435,3612,531],{"class":519},[435,3614,909],{"class":519},[435,3616,3617],{"class":912},"servicePlanId",[435,3619,947],{"class":519},[435,3621,3622],{"class":519},"),\n",[435,3624,3626,3629,3631,3633,3635,3637,3639,3641,3644,3646],{"class":437,"line":3625},188,[435,3627,3628],{"class":1305},"        service_plan_name",[435,3630,850],{"class":519},[435,3632,3606],{"class":953},[435,3634,1271],{"class":519},[435,3636,3564],{"class":953},[435,3638,531],{"class":519},[435,3640,909],{"class":519},[435,3642,3643],{"class":912},"servicePlanName",[435,3645,947],{"class":519},[435,3647,3622],{"class":519},[435,3649,3651,3654,3656,3658,3660,3662,3664,3666,3669,3671],{"class":437,"line":3650},189,[435,3652,3653],{"class":1305},"        provisioning_status",[435,3655,850],{"class":519},[435,3657,3606],{"class":953},[435,3659,1271],{"class":519},[435,3661,3564],{"class":953},[435,3663,531],{"class":519},[435,3665,909],{"class":519},[435,3667,3668],{"class":912},"provisioningStatus",[435,3670,947],{"class":519},[435,3672,3622],{"class":519},[435,3674,3676,3679,3681,3683,3685,3687,3689,3691,3694,3696],{"class":437,"line":3675},190,[435,3677,3678],{"class":1305},"        applies_to",[435,3680,850],{"class":519},[435,3682,3606],{"class":953},[435,3684,1271],{"class":519},[435,3686,3564],{"class":953},[435,3688,531],{"class":519},[435,3690,909],{"class":519},[435,3692,3693],{"class":912},"appliesTo",[435,3695,947],{"class":519},[435,3697,3622],{"class":519},[435,3699,3701],{"class":437,"line":3700},191,[435,3702,1803],{"class":519},[435,3704,3706],{"class":437,"line":3705},192,[435,3707,616],{"emptyLinePlaceholder":615},[435,3709,3711],{"class":437,"line":3710},193,[435,3712,616],{"emptyLinePlaceholder":615},[435,3714,3716,3718,3721,3723,3726,3728,3730,3732,3734,3736,3738,3740,3742,3745],{"class":437,"line":3715},194,[435,3717,1297],{"class":1296},[435,3719,3720],{"class":953}," company_subscription",[435,3722,1271],{"class":519},[435,3724,3725],{"class":1305},"subscription",[435,3727,252],{"class":519},[435,3729,878],{"class":445},[435,3731,881],{"class":519},[435,3733,885],{"class":884},[435,3735,531],{"class":519},[435,3737,1327],{"class":445},[435,3739,3579],{"class":519},[435,3741,1316],{"class":519},[435,3743,3744],{"class":445}," MicrosoftCompanySubscription",[435,3746,1364],{"class":519},[435,3748,3750,3752,3754],{"class":437,"line":3749},195,[435,3751,1437],{"class":441},[435,3753,3744],{"class":953},[435,3755,956],{"class":519},[435,3757,3759,3762,3764,3767,3769,3771,3773,3775,3778,3780],{"class":437,"line":3758},196,[435,3760,3761],{"class":1305},"        id",[435,3763,850],{"class":519},[435,3765,3766],{"class":953},"required_string",[435,3768,1271],{"class":519},[435,3770,3725],{"class":953},[435,3772,531],{"class":519},[435,3774,909],{"class":519},[435,3776,3777],{"class":912},"id",[435,3779,947],{"class":519},[435,3781,3622],{"class":519},[435,3783,3785,3788,3790,3792,3794,3796,3798,3800,3803,3805],{"class":437,"line":3784},197,[435,3786,3787],{"class":1305},"        commerce_subscription_id",[435,3789,850],{"class":519},[435,3791,3606],{"class":953},[435,3793,1271],{"class":519},[435,3795,3725],{"class":953},[435,3797,531],{"class":519},[435,3799,909],{"class":519},[435,3801,3802],{"class":912},"commerceSubscriptionId",[435,3804,947],{"class":519},[435,3806,3622],{"class":519},[435,3808,3810,3813,3815,3818,3820,3822,3824,3826,3829,3831],{"class":437,"line":3809},198,[435,3811,3812],{"class":1305},"        created_date_time",[435,3814,850],{"class":519},[435,3816,3817],{"class":953},"optional_timestamp",[435,3819,1271],{"class":519},[435,3821,3725],{"class":953},[435,3823,531],{"class":519},[435,3825,909],{"class":519},[435,3827,3828],{"class":912},"createdDateTime",[435,3830,947],{"class":519},[435,3832,3622],{"class":519},[435,3834,3836,3839,3841,3844,3846,3848,3850,3852,3855,3857],{"class":437,"line":3835},199,[435,3837,3838],{"class":1305},"        is_trial",[435,3840,850],{"class":519},[435,3842,3843],{"class":953},"optional_bool",[435,3845,1271],{"class":519},[435,3847,3725],{"class":953},[435,3849,531],{"class":519},[435,3851,909],{"class":519},[435,3853,3854],{"class":912},"isTrial",[435,3856,947],{"class":519},[435,3858,3622],{"class":519},[435,3860,3862,3865,3867,3869,3871,3873,3875,3877,3880,3882],{"class":437,"line":3861},200,[435,3863,3864],{"class":1305},"        next_lifecycle_date_time",[435,3866,850],{"class":519},[435,3868,3817],{"class":953},[435,3870,1271],{"class":519},[435,3872,3725],{"class":953},[435,3874,531],{"class":519},[435,3876,909],{"class":519},[435,3878,3879],{"class":912},"nextLifecycleDateTime",[435,3881,947],{"class":519},[435,3883,3622],{"class":519},[435,3885,3887,3890,3892,3894,3896,3898,3900,3902,3905,3907],{"class":437,"line":3886},201,[435,3888,3889],{"class":1305},"        owner_id",[435,3891,850],{"class":519},[435,3893,3606],{"class":953},[435,3895,1271],{"class":519},[435,3897,3725],{"class":953},[435,3899,531],{"class":519},[435,3901,909],{"class":519},[435,3903,3904],{"class":912},"ownerId",[435,3906,947],{"class":519},[435,3908,3622],{"class":519},[435,3910,3912,3915,3917,3919,3921,3923,3925,3927,3930,3932],{"class":437,"line":3911},202,[435,3913,3914],{"class":1305},"        owner_tenant_id",[435,3916,850],{"class":519},[435,3918,3606],{"class":953},[435,3920,1271],{"class":519},[435,3922,3725],{"class":953},[435,3924,531],{"class":519},[435,3926,909],{"class":519},[435,3928,3929],{"class":912},"ownerTenantId",[435,3931,947],{"class":519},[435,3933,3622],{"class":519},[435,3935,3937,3940,3942,3944,3946,3948,3950,3952,3955,3957],{"class":437,"line":3936},203,[435,3938,3939],{"class":1305},"        owner_type",[435,3941,850],{"class":519},[435,3943,3606],{"class":953},[435,3945,1271],{"class":519},[435,3947,3725],{"class":953},[435,3949,531],{"class":519},[435,3951,909],{"class":519},[435,3953,3954],{"class":912},"ownerType",[435,3956,947],{"class":519},[435,3958,3622],{"class":519},[435,3960,3962,3965,3968,3971,3973,3975,3977,3979,3981,3983,3985,3987,3989,3991,3993,3996,3998],{"class":437,"line":3961},204,[435,3963,3964],{"class":1305},"        service_status",[435,3966,3967],{"class":519},"=[",[435,3969,3970],{"class":953},"service_plan_info",[435,3972,1271],{"class":519},[435,3974,2212],{"class":953},[435,3976,1313],{"class":519},[435,3978,2221],{"class":441},[435,3980,2224],{"class":953},[435,3982,1549],{"class":441},[435,3984,3429],{"class":953},[435,3986,1271],{"class":519},[435,3988,3725],{"class":953},[435,3990,531],{"class":519},[435,3992,909],{"class":519},[435,3994,3995],{"class":912},"serviceStatus",[435,3997,947],{"class":519},[435,3999,4000],{"class":519},")],\n",[435,4002,4004,4007,4009,4011,4013,4015,4017,4019,4022,4024],{"class":437,"line":4003},205,[435,4005,4006],{"class":1305},"        sku_id",[435,4008,850],{"class":519},[435,4010,3606],{"class":953},[435,4012,1271],{"class":519},[435,4014,3725],{"class":953},[435,4016,531],{"class":519},[435,4018,909],{"class":519},[435,4020,4021],{"class":912},"skuId",[435,4023,947],{"class":519},[435,4025,3622],{"class":519},[435,4027,4029,4032,4034,4036,4038,4040,4042,4044,4047,4049],{"class":437,"line":4028},206,[435,4030,4031],{"class":1305},"        sku_part_number",[435,4033,850],{"class":519},[435,4035,3606],{"class":953},[435,4037,1271],{"class":519},[435,4039,3725],{"class":953},[435,4041,531],{"class":519},[435,4043,909],{"class":519},[435,4045,4046],{"class":912},"skuPartNumber",[435,4048,947],{"class":519},[435,4050,3622],{"class":519},[435,4052,4054,4057,4059,4061,4063,4065,4067,4069,4072,4074],{"class":437,"line":4053},207,[435,4055,4056],{"class":1305},"        status",[435,4058,850],{"class":519},[435,4060,3606],{"class":953},[435,4062,1271],{"class":519},[435,4064,3725],{"class":953},[435,4066,531],{"class":519},[435,4068,909],{"class":519},[435,4070,4071],{"class":912},"status",[435,4073,947],{"class":519},[435,4075,3622],{"class":519},[435,4077,4079,4082,4084,4087,4089,4091,4093,4095,4098,4100],{"class":437,"line":4078},208,[435,4080,4081],{"class":1305},"        total_licenses",[435,4083,850],{"class":519},[435,4085,4086],{"class":953},"optional_int",[435,4088,1271],{"class":519},[435,4090,3725],{"class":953},[435,4092,531],{"class":519},[435,4094,909],{"class":519},[435,4096,4097],{"class":912},"totalLicenses",[435,4099,947],{"class":519},[435,4101,3622],{"class":519},[435,4103,4105],{"class":437,"line":4104},209,[435,4106,1803],{"class":519},[435,4108,4110],{"class":437,"line":4109},210,[435,4111,616],{"emptyLinePlaceholder":615},[435,4113,4115],{"class":437,"line":4114},211,[435,4116,616],{"emptyLinePlaceholder":615},[435,4118,4120,4122,4125,4127,4130,4132,4134,4136,4138,4140,4142,4144,4146,4149,4151],{"class":437,"line":4119},212,[435,4121,1297],{"class":1296},[435,4123,4124],{"class":953}," prepaid_units",[435,4126,1271],{"class":519},[435,4128,4129],{"class":1305},"sku",[435,4131,252],{"class":519},[435,4133,878],{"class":445},[435,4135,881],{"class":519},[435,4137,885],{"class":884},[435,4139,531],{"class":519},[435,4141,1327],{"class":445},[435,4143,3579],{"class":519},[435,4145,1316],{"class":519},[435,4147,4148],{"class":445}," MicrosoftLicenseUnitsDetail ",[435,4150,3206],{"class":519},[435,4152,2462],{"class":519},[435,4154,4156,4159,4161,4164,4166,4168,4170,4172,4175,4177],{"class":437,"line":4155},213,[435,4157,4158],{"class":445},"    units ",[435,4160,850],{"class":519},[435,4162,4163],{"class":445}," sku",[435,4165,520],{"class":519},[435,4167,1823],{"class":953},[435,4169,1271],{"class":519},[435,4171,947],{"class":519},[435,4173,4174],{"class":912},"prepaidUnits",[435,4176,947],{"class":519},[435,4178,836],{"class":519},[435,4180,4182,4184,4186,4188,4190,4193,4195,4197],{"class":437,"line":4181},214,[435,4183,1393],{"class":441},[435,4185,1396],{"class":519},[435,4187,1399],{"class":953},[435,4189,1271],{"class":519},[435,4191,4192],{"class":953},"units",[435,4194,531],{"class":519},[435,4196,878],{"class":884},[435,4198,1411],{"class":519},[435,4200,4202,4204],{"class":437,"line":4201},215,[435,4203,3244],{"class":441},[435,4205,2943],{"class":519},[435,4207,4209,4211,4214],{"class":437,"line":4208},216,[435,4210,1437],{"class":441},[435,4212,4213],{"class":953}," MicrosoftLicenseUnitsDetail",[435,4215,956],{"class":519},[435,4217,4219,4222,4224,4226,4228,4230,4232,4234,4237,4239],{"class":437,"line":4218},217,[435,4220,4221],{"class":1305},"        enabled",[435,4223,850],{"class":519},[435,4225,4086],{"class":953},[435,4227,1271],{"class":519},[435,4229,4192],{"class":953},[435,4231,531],{"class":519},[435,4233,909],{"class":519},[435,4235,4236],{"class":912},"enabled",[435,4238,947],{"class":519},[435,4240,3622],{"class":519},[435,4242,4244,4247,4249,4251,4253,4255,4257,4259,4262,4264],{"class":437,"line":4243},218,[435,4245,4246],{"class":1305},"        locked_out",[435,4248,850],{"class":519},[435,4250,4086],{"class":953},[435,4252,1271],{"class":519},[435,4254,4192],{"class":953},[435,4256,531],{"class":519},[435,4258,909],{"class":519},[435,4260,4261],{"class":912},"lockedOut",[435,4263,947],{"class":519},[435,4265,3622],{"class":519},[435,4267,4269,4272,4274,4276,4278,4280,4282,4284,4287,4289],{"class":437,"line":4268},219,[435,4270,4271],{"class":1305},"        suspended",[435,4273,850],{"class":519},[435,4275,4086],{"class":953},[435,4277,1271],{"class":519},[435,4279,4192],{"class":953},[435,4281,531],{"class":519},[435,4283,909],{"class":519},[435,4285,4286],{"class":912},"suspended",[435,4288,947],{"class":519},[435,4290,3622],{"class":519},[435,4292,4294,4297,4299,4301,4303,4305,4307,4309,4312,4314],{"class":437,"line":4293},220,[435,4295,4296],{"class":1305},"        warning",[435,4298,850],{"class":519},[435,4300,4086],{"class":953},[435,4302,1271],{"class":519},[435,4304,4192],{"class":953},[435,4306,531],{"class":519},[435,4308,909],{"class":519},[435,4310,4311],{"class":912},"warning",[435,4313,947],{"class":519},[435,4315,3622],{"class":519},[435,4317,4319],{"class":437,"line":4318},221,[435,4320,1803],{"class":519},[435,4322,4324],{"class":437,"line":4323},222,[435,4325,616],{"emptyLinePlaceholder":615},[435,4327,4329],{"class":437,"line":4328},223,[435,4330,616],{"emptyLinePlaceholder":615},[435,4332,4334,4336,4339],{"class":437,"line":4333},224,[435,4335,1297],{"class":1296},[435,4337,4338],{"class":953}," plan_from_subscribed_sku",[435,4340,956],{"class":519},[435,4342,4344,4347,4349,4351,4353,4355,4357,4359],{"class":437,"line":4343},225,[435,4345,4346],{"class":1305},"    sku",[435,4348,252],{"class":519},[435,4350,878],{"class":445},[435,4352,881],{"class":519},[435,4354,885],{"class":884},[435,4356,531],{"class":519},[435,4358,1327],{"class":445},[435,4360,1684],{"class":519},[435,4362,4364,4367,4369,4371,4373,4375,4377,4379,4381,4384],{"class":437,"line":4363},226,[435,4365,4366],{"class":1305},"    subscriptions_by_sku_id",[435,4368,252],{"class":519},[435,4370,878],{"class":445},[435,4372,881],{"class":519},[435,4374,885],{"class":884},[435,4376,531],{"class":519},[435,4378,2193],{"class":445},[435,4380,881],{"class":519},[435,4382,4383],{"class":445},"MicrosoftCompanySubscription",[435,4385,4386],{"class":519},"]],\n",[435,4388,4390,4392,4394,4397],{"class":437,"line":4389},227,[435,4391,1313],{"class":519},[435,4393,1316],{"class":519},[435,4395,4396],{"class":445}," Plan",[435,4398,1364],{"class":519},[435,4400,4402,4405,4407,4409,4411,4413,4415,4417,4419,4421],{"class":437,"line":4401},228,[435,4403,4404],{"class":445},"    sku_id ",[435,4406,850],{"class":519},[435,4408,2722],{"class":953},[435,4410,1271],{"class":519},[435,4412,4129],{"class":953},[435,4414,531],{"class":519},[435,4416,909],{"class":519},[435,4418,4021],{"class":912},[435,4420,947],{"class":519},[435,4422,836],{"class":519},[435,4424,4426,4428,4430],{"class":437,"line":4425},229,[435,4427,1437],{"class":441},[435,4429,4396],{"class":953},[435,4431,956],{"class":519},[435,4433,4435,4438,4440,4442],{"class":437,"line":4434},230,[435,4436,4437],{"class":1305},"        microsoft",[435,4439,850],{"class":519},[435,4441,149],{"class":953},[435,4443,956],{"class":519},[435,4445,4447,4450,4452,4455],{"class":437,"line":4446},231,[435,4448,4449],{"class":1305},"            sku_id",[435,4451,850],{"class":519},[435,4453,4454],{"class":953},"sku_id",[435,4456,710],{"class":519},[435,4458,4460,4463,4465,4467,4469,4471,4473,4475,4477,4479],{"class":437,"line":4459},232,[435,4461,4462],{"class":1305},"            sku_part_number",[435,4464,850],{"class":519},[435,4466,3766],{"class":953},[435,4468,1271],{"class":519},[435,4470,4129],{"class":953},[435,4472,531],{"class":519},[435,4474,909],{"class":519},[435,4476,4046],{"class":912},[435,4478,947],{"class":519},[435,4480,3622],{"class":519},[435,4482,4484,4487,4489,4491,4493,4495,4497,4499,4502,4504],{"class":437,"line":4483},233,[435,4485,4486],{"class":1305},"            account_id",[435,4488,850],{"class":519},[435,4490,3606],{"class":953},[435,4492,1271],{"class":519},[435,4494,4129],{"class":953},[435,4496,531],{"class":519},[435,4498,909],{"class":519},[435,4500,4501],{"class":912},"accountId",[435,4503,947],{"class":519},[435,4505,3622],{"class":519},[435,4507,4509,4512,4514,4516,4518,4520,4522,4524,4527,4529],{"class":437,"line":4508},234,[435,4510,4511],{"class":1305},"            account_name",[435,4513,850],{"class":519},[435,4515,3606],{"class":953},[435,4517,1271],{"class":519},[435,4519,4129],{"class":953},[435,4521,531],{"class":519},[435,4523,909],{"class":519},[435,4525,4526],{"class":912},"accountName",[435,4528,947],{"class":519},[435,4530,3622],{"class":519},[435,4532,4534,4537,4539,4541,4543,4545,4547,4549,4551,4553],{"class":437,"line":4533},235,[435,4535,4536],{"class":1305},"            applies_to",[435,4538,850],{"class":519},[435,4540,3606],{"class":953},[435,4542,1271],{"class":519},[435,4544,4129],{"class":953},[435,4546,531],{"class":519},[435,4548,909],{"class":519},[435,4550,3693],{"class":912},[435,4552,947],{"class":519},[435,4554,3622],{"class":519},[435,4556,4558,4561,4563,4565,4567,4569,4571,4573,4576,4578],{"class":437,"line":4557},236,[435,4559,4560],{"class":1305},"            capability_status",[435,4562,850],{"class":519},[435,4564,3606],{"class":953},[435,4566,1271],{"class":519},[435,4568,4129],{"class":953},[435,4570,531],{"class":519},[435,4572,909],{"class":519},[435,4574,4575],{"class":912},"capabilityStatus",[435,4577,947],{"class":519},[435,4579,3622],{"class":519},[435,4581,4583,4586,4588,4590,4592,4594,4596,4598,4601,4603],{"class":437,"line":4582},237,[435,4584,4585],{"class":1305},"            consumed_units",[435,4587,850],{"class":519},[435,4589,4086],{"class":953},[435,4591,1271],{"class":519},[435,4593,4129],{"class":953},[435,4595,531],{"class":519},[435,4597,909],{"class":519},[435,4599,4600],{"class":912},"consumedUnits",[435,4602,947],{"class":519},[435,4604,3622],{"class":519},[435,4606,4608,4611,4613,4616,4618,4620],{"class":437,"line":4607},238,[435,4609,4610],{"class":1305},"            prepaid_units",[435,4612,850],{"class":519},[435,4614,4615],{"class":953},"prepaid_units",[435,4617,1271],{"class":519},[435,4619,4129],{"class":953},[435,4621,3622],{"class":519},[435,4623,4625,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4657,4659],{"class":437,"line":4624},239,[435,4626,4627],{"class":1305},"            service_plans",[435,4629,3967],{"class":519},[435,4631,3970],{"class":953},[435,4633,1271],{"class":519},[435,4635,2212],{"class":953},[435,4637,1313],{"class":519},[435,4639,2221],{"class":441},[435,4641,2224],{"class":953},[435,4643,1549],{"class":441},[435,4645,3429],{"class":953},[435,4647,1271],{"class":519},[435,4649,4129],{"class":953},[435,4651,531],{"class":519},[435,4653,909],{"class":519},[435,4655,4656],{"class":912},"servicePlans",[435,4658,947],{"class":519},[435,4660,4000],{"class":519},[435,4662,4664,4667,4669,4672,4674,4676,4678,4680,4683,4685],{"class":437,"line":4663},240,[435,4665,4666],{"class":1305},"            subscription_ids",[435,4668,850],{"class":519},[435,4670,4671],{"class":953},"strings",[435,4673,1271],{"class":519},[435,4675,4129],{"class":953},[435,4677,531],{"class":519},[435,4679,909],{"class":519},[435,4681,4682],{"class":912},"subscriptionIds",[435,4684,947],{"class":519},[435,4686,3622],{"class":519},[435,4688,4690,4693,4695,4698,4700,4702,4704,4706,4708,4711,4714],{"class":437,"line":4689},241,[435,4691,4692],{"class":1305},"            subscriptions",[435,4694,850],{"class":519},[435,4696,4697],{"class":953},"subscriptions_by_sku_id",[435,4699,520],{"class":519},[435,4701,1823],{"class":953},[435,4703,1271],{"class":519},[435,4705,4454],{"class":953},[435,4707,520],{"class":519},[435,4709,4710],{"class":953},"lower",[435,4712,4713],{"class":519},"(),",[435,4715,4716],{"class":519}," []),\n",[435,4718,4720],{"class":437,"line":4719},242,[435,4721,2143],{"class":519},[435,4723,4725],{"class":437,"line":4724},243,[435,4726,1803],{"class":519},[435,4728,4730],{"class":437,"line":4729},244,[435,4731,616],{"emptyLinePlaceholder":615},[435,4733,4735],{"class":437,"line":4734},245,[435,4736,616],{"emptyLinePlaceholder":615},[435,4738,4740,4742,4745,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769,4771],{"class":437,"line":4739},246,[435,4741,1297],{"class":1296},[435,4743,4744],{"class":953}," fetch_company_subscriptions",[435,4746,1271],{"class":519},[435,4748,1830],{"class":1305},[435,4750,252],{"class":519},[435,4752,890],{"class":884},[435,4754,1313],{"class":519},[435,4756,1316],{"class":519},[435,4758,878],{"class":445},[435,4760,881],{"class":519},[435,4762,885],{"class":884},[435,4764,531],{"class":519},[435,4766,2193],{"class":445},[435,4768,881],{"class":519},[435,4770,4383],{"class":445},[435,4772,2397],{"class":519},[435,4774,4776,4779],{"class":437,"line":4775},247,[435,4777,4778],{"class":441},"    try",[435,4780,1364],{"class":519},[435,4782,4784,4787,4789,4791,4793,4796,4798,4800],{"class":437,"line":4783},248,[435,4785,4786],{"class":445},"        subscriptions ",[435,4788,850],{"class":519},[435,4790,2360],{"class":953},[435,4792,1271],{"class":519},[435,4794,4795],{"class":953},"GRAPH_SUBSCRIPTIONS_URL",[435,4797,531],{"class":519},[435,4799,1922],{"class":953},[435,4801,836],{"class":519},[435,4803,4805,4808,4811,4814,4817],{"class":437,"line":4804},249,[435,4806,4807],{"class":441},"    except",[435,4809,4810],{"class":445}," HTTPError ",[435,4812,4813],{"class":441},"as",[435,4815,4816],{"class":445}," error",[435,4818,1364],{"class":519},[435,4820,4822,4825,4827,4829,4831,4833,4836],{"class":437,"line":4821},250,[435,4823,4824],{"class":441},"        if",[435,4826,4816],{"class":445},[435,4828,520],{"class":519},[435,4830,147],{"class":1483},[435,4832,1995],{"class":519},[435,4834,4835],{"class":1246}," 403",[435,4837,1364],{"class":519},[435,4839,4841],{"class":437,"line":4840},251,[435,4842,4843],{"class":441},"            raise\n",[435,4845,4847,4850,4852,4854,4856,4858,4861,4863],{"class":437,"line":4846},252,[435,4848,4849],{"class":445},"        logger",[435,4851,520],{"class":519},[435,4853,4311],{"class":953},[435,4855,1271],{"class":519},[435,4857,947],{"class":519},[435,4859,4860],{"class":912},"Organization.Read.All is not granted, so plans are sent without subscriptions",[435,4862,947],{"class":519},[435,4864,836],{"class":519},[435,4866,4868,4870],{"class":437,"line":4867},253,[435,4869,3244],{"class":441},[435,4871,4872],{"class":519}," {}\n",[435,4874,4876],{"class":437,"line":4875},254,[435,4877,616],{"emptyLinePlaceholder":615},[435,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901,4903,4906,4908,4910],{"class":437,"line":4880},255,[435,4882,4366],{"class":445},[435,4884,252],{"class":519},[435,4886,878],{"class":445},[435,4888,881],{"class":519},[435,4890,885],{"class":884},[435,4892,531],{"class":519},[435,4894,2193],{"class":445},[435,4896,881],{"class":519},[435,4898,4383],{"class":445},[435,4900,2422],{"class":519},[435,4902,2425],{"class":519},[435,4904,4905],{"class":953}," defaultdict",[435,4907,1271],{"class":519},[435,4909,1938],{"class":884},[435,4911,836],{"class":519},[435,4913,4915,4918,4921,4923,4926],{"class":437,"line":4914},256,[435,4916,4917],{"class":441},"    for",[435,4919,4920],{"class":445}," subscription ",[435,4922,1549],{"class":441},[435,4924,4925],{"class":445}," subscriptions",[435,4927,1364],{"class":519},[435,4929,4931,4934,4936,4938,4940,4942,4944,4946,4948,4950],{"class":437,"line":4930},257,[435,4932,4933],{"class":445},"        sku_id ",[435,4935,850],{"class":519},[435,4937,2857],{"class":953},[435,4939,1271],{"class":519},[435,4941,3725],{"class":953},[435,4943,531],{"class":519},[435,4945,909],{"class":519},[435,4947,4021],{"class":912},[435,4949,947],{"class":519},[435,4951,836],{"class":519},[435,4953,4955,4957,4960,4962,4964],{"class":437,"line":4954},258,[435,4956,4824],{"class":441},[435,4958,4959],{"class":445}," sku_id ",[435,4961,2290],{"class":519},[435,4963,1396],{"class":519},[435,4965,2462],{"class":519},[435,4967,4969,4972,4974,4976,4978,4980,4983,4986,4988,4991,4993,4995],{"class":437,"line":4968},259,[435,4970,4971],{"class":445},"            subscriptions_by_sku_id",[435,4973,881],{"class":519},[435,4975,4454],{"class":445},[435,4977,520],{"class":519},[435,4979,4710],{"class":953},[435,4981,4982],{"class":519},"()].",[435,4984,4985],{"class":953},"append",[435,4987,1271],{"class":519},[435,4989,4990],{"class":953},"company_subscription",[435,4992,1271],{"class":519},[435,4994,3725],{"class":953},[435,4996,4997],{"class":519},"))\n",[435,4999,5001,5003],{"class":437,"line":5000},260,[435,5002,1437],{"class":441},[435,5004,5005],{"class":445}," subscriptions_by_sku_id\n",[435,5007,5009],{"class":437,"line":5008},261,[435,5010,616],{"emptyLinePlaceholder":615},[435,5012,5014],{"class":437,"line":5013},262,[435,5015,616],{"emptyLinePlaceholder":615},[435,5017,5019,5021,5024,5026,5028,5030,5032,5034,5036,5038,5040,5042],{"class":437,"line":5018},263,[435,5020,1297],{"class":1296},[435,5022,5023],{"class":953}," fetch_plans",[435,5025,1271],{"class":519},[435,5027,1830],{"class":1305},[435,5029,252],{"class":519},[435,5031,890],{"class":884},[435,5033,1313],{"class":519},[435,5035,1316],{"class":519},[435,5037,2193],{"class":445},[435,5039,881],{"class":519},[435,5041,136],{"class":445},[435,5043,1330],{"class":519},[435,5045,5047,5050,5052,5054,5056,5058],{"class":437,"line":5046},264,[435,5048,5049],{"class":445},"    subscriptions_by_sku_id ",[435,5051,850],{"class":519},[435,5053,4744],{"class":953},[435,5055,1271],{"class":519},[435,5057,1830],{"class":953},[435,5059,836],{"class":519},[435,5061,5063,5066,5068,5070,5072,5075,5077,5079],{"class":437,"line":5062},265,[435,5064,5065],{"class":445},"    skus ",[435,5067,850],{"class":519},[435,5069,2360],{"class":953},[435,5071,1271],{"class":519},[435,5073,5074],{"class":953},"GRAPH_SUBSCRIBED_SKUS_URL",[435,5076,531],{"class":519},[435,5078,1922],{"class":953},[435,5080,836],{"class":519},[435,5082,5084,5086],{"class":437,"line":5083},266,[435,5085,1437],{"class":441},[435,5087,5088],{"class":519}," [\n",[435,5090,5092,5095,5097,5099,5101,5104],{"class":437,"line":5091},267,[435,5093,5094],{"class":953},"        plan_from_subscribed_sku",[435,5096,1271],{"class":519},[435,5098,4129],{"class":953},[435,5100,531],{"class":519},[435,5102,5103],{"class":953}," subscriptions_by_sku_id",[435,5105,836],{"class":519},[435,5107,5109,5112,5115,5117],{"class":437,"line":5108},268,[435,5110,5111],{"class":441},"        for",[435,5113,5114],{"class":445}," sku ",[435,5116,1549],{"class":441},[435,5118,5119],{"class":445}," skus\n",[435,5121,5123,5125,5127,5129,5131,5133,5135,5137,5139,5141,5143,5145],{"class":437,"line":5122},269,[435,5124,4824],{"class":441},[435,5126,4163],{"class":445},[435,5128,520],{"class":519},[435,5130,1823],{"class":953},[435,5132,1271],{"class":519},[435,5134,947],{"class":519},[435,5136,4575],{"class":912},[435,5138,947],{"class":519},[435,5140,1313],{"class":519},[435,5142,1396],{"class":519},[435,5144,1537],{"class":519},[435,5146,5147],{"class":445}," SKIPPED_CAPABILITY_STATUSES\n",[435,5149,5151],{"class":437,"line":5150},270,[435,5152,5153],{"class":519},"    ]\n",[435,5155,5157],{"class":437,"line":5156},271,[435,5158,616],{"emptyLinePlaceholder":615},[435,5160,5162],{"class":437,"line":5161},272,[435,5163,616],{"emptyLinePlaceholder":615},[435,5165,5167,5169,5172,5174,5177,5179,5181,5183,5185,5187,5189,5191,5193,5196],{"class":437,"line":5166},273,[435,5168,1297],{"class":1296},[435,5170,5171],{"class":953}," account_from_graph_user",[435,5173,1271],{"class":519},[435,5175,5176],{"class":1305},"user",[435,5178,252],{"class":519},[435,5180,878],{"class":445},[435,5182,881],{"class":519},[435,5184,885],{"class":884},[435,5186,531],{"class":519},[435,5188,1327],{"class":445},[435,5190,3579],{"class":519},[435,5192,1316],{"class":519},[435,5194,5195],{"class":445}," Account",[435,5197,1364],{"class":519},[435,5199,5201,5204,5206,5208,5210,5212,5214,5216,5219,5221],{"class":437,"line":5200},274,[435,5202,5203],{"class":445},"    account_enabled ",[435,5205,850],{"class":519},[435,5207,3076],{"class":953},[435,5209,1271],{"class":519},[435,5211,5176],{"class":953},[435,5213,531],{"class":519},[435,5215,909],{"class":519},[435,5217,5218],{"class":912},"accountEnabled",[435,5220,947],{"class":519},[435,5222,836],{"class":519},[435,5224,5226,5228,5230],{"class":437,"line":5225},275,[435,5227,1437],{"class":441},[435,5229,5195],{"class":953},[435,5231,956],{"class":519},[435,5233,5235,5238,5240,5242],{"class":437,"line":5234},276,[435,5236,5237],{"class":1305},"        generic",[435,5239,850],{"class":519},[435,5241,165],{"class":953},[435,5243,956],{"class":519},[435,5245,5247,5250,5252,5254,5256,5258,5260,5262,5264,5266],{"class":437,"line":5246},277,[435,5248,5249],{"class":1305},"            id",[435,5251,850],{"class":519},[435,5253,3766],{"class":953},[435,5255,1271],{"class":519},[435,5257,5176],{"class":953},[435,5259,531],{"class":519},[435,5261,909],{"class":519},[435,5263,3777],{"class":912},[435,5265,947],{"class":519},[435,5267,3622],{"class":519},[435,5269,5271,5274,5276,5278,5280,5282,5284,5286,5289,5291],{"class":437,"line":5270},278,[435,5272,5273],{"class":1305},"            name",[435,5275,850],{"class":519},[435,5277,3606],{"class":953},[435,5279,1271],{"class":519},[435,5281,5176],{"class":953},[435,5283,531],{"class":519},[435,5285,909],{"class":519},[435,5287,5288],{"class":912},"displayName",[435,5290,947],{"class":519},[435,5292,3622],{"class":519},[435,5294,5296,5299,5301,5303,5305,5307,5309,5311,5314,5316,5318,5320,5322,5324,5326,5328,5330,5333,5335],{"class":437,"line":5295},279,[435,5297,5298],{"class":1305},"            email",[435,5300,850],{"class":519},[435,5302,3606],{"class":953},[435,5304,1271],{"class":519},[435,5306,5176],{"class":953},[435,5308,531],{"class":519},[435,5310,909],{"class":519},[435,5312,5313],{"class":912},"mail",[435,5315,947],{"class":519},[435,5317,1313],{"class":519},[435,5319,1857],{"class":441},[435,5321,2857],{"class":953},[435,5323,1271],{"class":519},[435,5325,5176],{"class":953},[435,5327,531],{"class":519},[435,5329,909],{"class":519},[435,5331,5332],{"class":912},"userPrincipalName",[435,5334,947],{"class":519},[435,5336,3622],{"class":519},[435,5338,5340,5343,5346,5348,5351,5353,5355,5357,5360],{"class":437,"line":5339},280,[435,5341,5342],{"class":1305},"            active",[435,5344,5345],{"class":519},"=True",[435,5347,3395],{"class":441},[435,5349,5350],{"class":953}," account_enabled ",[435,5352,2290],{"class":441},[435,5354,2295],{"class":519},[435,5356,3056],{"class":441},[435,5358,5359],{"class":953}," account_enabled",[435,5361,710],{"class":519},[435,5363,5365,5368,5370,5372,5374,5376,5378,5380,5383,5385],{"class":437,"line":5364},281,[435,5366,5367],{"class":1305},"            type",[435,5369,850],{"class":519},[435,5371,3606],{"class":953},[435,5373,1271],{"class":519},[435,5375,5176],{"class":953},[435,5377,531],{"class":519},[435,5379,909],{"class":519},[435,5381,5382],{"class":912},"userType",[435,5384,947],{"class":519},[435,5386,3622],{"class":519},[435,5388,5390],{"class":437,"line":5389},282,[435,5391,2143],{"class":519},[435,5393,5395],{"class":437,"line":5394},283,[435,5396,1803],{"class":519},[435,5398,5400],{"class":437,"line":5399},284,[435,5401,616],{"emptyLinePlaceholder":615},[435,5403,5405],{"class":437,"line":5404},285,[435,5406,616],{"emptyLinePlaceholder":615},[435,5408,5410,5412,5415,5417,5419,5421,5423,5425,5427,5429,5431,5433,5436,5438,5440,5442,5444,5446,5448,5450,5452,5454,5456,5458],{"class":437,"line":5409},286,[435,5411,1297],{"class":1296},[435,5413,5414],{"class":953}," licenses_from_graph_user",[435,5416,1271],{"class":519},[435,5418,5176],{"class":1305},[435,5420,252],{"class":519},[435,5422,878],{"class":445},[435,5424,881],{"class":519},[435,5426,885],{"class":884},[435,5428,531],{"class":519},[435,5430,1327],{"class":445},[435,5432,862],{"class":519},[435,5434,5435],{"class":1305}," plan_ids",[435,5437,252],{"class":519},[435,5439,878],{"class":445},[435,5441,881],{"class":519},[435,5443,885],{"class":884},[435,5445,531],{"class":519},[435,5447,890],{"class":884},[435,5449,3579],{"class":519},[435,5451,1316],{"class":519},[435,5453,2193],{"class":445},[435,5455,881],{"class":519},[435,5457,170],{"class":445},[435,5459,1330],{"class":519},[435,5461,5463,5466,5468,5470,5472,5474,5476,5478,5480,5482],{"class":437,"line":5462},287,[435,5464,5465],{"class":445},"    user_id ",[435,5467,850],{"class":519},[435,5469,2722],{"class":953},[435,5471,1271],{"class":519},[435,5473,5176],{"class":953},[435,5475,531],{"class":519},[435,5477,909],{"class":519},[435,5479,3777],{"class":912},[435,5481,947],{"class":519},[435,5483,836],{"class":519},[435,5485,5487,5490,5492,5494,5496,5498,5501,5503],{"class":437,"line":5486},288,[435,5488,5489],{"class":445},"    licenses",[435,5491,252],{"class":519},[435,5493,2193],{"class":445},[435,5495,881],{"class":519},[435,5497,170],{"class":445},[435,5499,5500],{"class":519},"]",[435,5502,2425],{"class":519},[435,5504,2428],{"class":519},[435,5506,5508,5510,5513,5515,5517,5519,5521,5523,5525,5528,5530],{"class":437,"line":5507},289,[435,5509,4917],{"class":441},[435,5511,5512],{"class":445}," assigned_license ",[435,5514,1549],{"class":441},[435,5516,3429],{"class":953},[435,5518,1271],{"class":519},[435,5520,5176],{"class":953},[435,5522,531],{"class":519},[435,5524,909],{"class":519},[435,5526,5527],{"class":912},"assignedLicenses",[435,5529,947],{"class":519},[435,5531,1411],{"class":519},[435,5533,5535,5537,5539,5541,5543,5546,5548,5550,5552,5554],{"class":437,"line":5534},290,[435,5536,4933],{"class":445},[435,5538,850],{"class":519},[435,5540,2857],{"class":953},[435,5542,1271],{"class":519},[435,5544,5545],{"class":953},"assigned_license",[435,5547,531],{"class":519},[435,5549,909],{"class":519},[435,5551,4021],{"class":912},[435,5553,947],{"class":519},[435,5555,836],{"class":519},[435,5557,5559,5562,5564,5566,5568,5570,5572,5574,5576,5578,5581,5583,5585,5587,5589,5591,5593],{"class":437,"line":5558},291,[435,5560,5561],{"class":445},"        plan_id ",[435,5563,850],{"class":519},[435,5565,5435],{"class":445},[435,5567,520],{"class":519},[435,5569,1823],{"class":953},[435,5571,1271],{"class":519},[435,5573,4454],{"class":953},[435,5575,520],{"class":519},[435,5577,4710],{"class":953},[435,5579,5580],{"class":519},"())",[435,5582,3395],{"class":441},[435,5584,4959],{"class":445},[435,5586,2290],{"class":519},[435,5588,1396],{"class":519},[435,5590,2295],{"class":519},[435,5592,3056],{"class":441},[435,5594,2943],{"class":519},[435,5596,5598,5600,5603,5605,5607],{"class":437,"line":5597},292,[435,5599,4824],{"class":441},[435,5601,5602],{"class":445}," plan_id ",[435,5604,2290],{"class":519},[435,5606,1396],{"class":519},[435,5608,2462],{"class":519},[435,5610,5612,5615,5617,5619],{"class":437,"line":5611},293,[435,5613,5614],{"class":445},"            licenses",[435,5616,520],{"class":519},[435,5618,4985],{"class":953},[435,5620,956],{"class":519},[435,5622,5624,5627],{"class":437,"line":5623},294,[435,5625,5626],{"class":953},"                License",[435,5628,956],{"class":519},[435,5630,5632,5635,5637,5639],{"class":437,"line":5631},295,[435,5633,5634],{"class":1305},"                    generic",[435,5636,850],{"class":519},[435,5638,181],{"class":953},[435,5640,956],{"class":519},[435,5642,5644,5647,5649,5651,5653,5655,5658,5660,5663,5665,5668,5670,5672],{"class":437,"line":5643},296,[435,5645,5646],{"class":1305},"                        source_id",[435,5648,850],{"class":519},[435,5650,2818],{"class":1296},[435,5652,947],{"class":912},[435,5654,1602],{"class":1246},[435,5656,5657],{"class":953},"user_id",[435,5659,1608],{"class":1246},[435,5661,5662],{"class":912},"_",[435,5664,1602],{"class":1246},[435,5666,5667],{"class":953},"plan_id",[435,5669,1608],{"class":1246},[435,5671,947],{"class":912},[435,5673,710],{"class":519},[435,5675,5677,5680,5682,5684],{"class":437,"line":5676},297,[435,5678,5679],{"class":1305},"                        source_account_id",[435,5681,850],{"class":519},[435,5683,5657],{"class":953},[435,5685,710],{"class":519},[435,5687,5689,5692,5694,5696],{"class":437,"line":5688},298,[435,5690,5691],{"class":1305},"                        source_plan_id",[435,5693,850],{"class":519},[435,5695,5667],{"class":953},[435,5697,710],{"class":519},[435,5699,5701,5704],{"class":437,"line":5700},299,[435,5702,5703],{"class":1305},"                        billable",[435,5705,5706],{"class":519},"=True,\n",[435,5708,5710],{"class":437,"line":5709},300,[435,5711,5712],{"class":519},"                    )\n",[435,5714,5716],{"class":437,"line":5715},301,[435,5717,5718],{"class":519},"                )\n",[435,5720,5722],{"class":437,"line":5721},302,[435,5723,5724],{"class":519},"            )\n",[435,5726,5728,5730],{"class":437,"line":5727},303,[435,5729,1437],{"class":441},[435,5731,5732],{"class":445}," licenses\n",[435,5734,5736],{"class":437,"line":5735},304,[435,5737,616],{"emptyLinePlaceholder":615},[435,5739,5741],{"class":437,"line":5740},305,[435,5742,616],{"emptyLinePlaceholder":615},[435,5744,5746,5748,5751,5753,5755,5757,5759,5761,5764,5766,5768,5770,5773,5775,5777,5779,5781,5784],{"class":437,"line":5745},306,[435,5747,1297],{"class":1296},[435,5749,5750],{"class":953}," usage_record",[435,5752,1271],{"class":519},[435,5754,5657],{"class":1305},[435,5756,252],{"class":519},[435,5758,890],{"class":884},[435,5760,531],{"class":519},[435,5762,5763],{"class":1305}," product_name",[435,5765,252],{"class":519},[435,5767,890],{"class":884},[435,5769,531],{"class":519},[435,5771,5772],{"class":1305}," last_activity_date",[435,5774,252],{"class":519},[435,5776,890],{"class":884},[435,5778,1313],{"class":519},[435,5780,1316],{"class":519},[435,5782,5783],{"class":445}," Usage",[435,5785,1364],{"class":519},[435,5787,5789,5792,5794,5796],{"class":437,"line":5788},307,[435,5790,5791],{"class":445},"    last_activity ",[435,5793,850],{"class":519},[435,5795,3257],{"class":953},[435,5797,3260],{"class":519},[435,5799,5801,5804,5806,5808,5810,5812,5814,5816,5819,5821,5824],{"class":437,"line":5800},308,[435,5802,5803],{"class":445},"    last_activity",[435,5805,520],{"class":519},[435,5807,3271],{"class":953},[435,5809,1271],{"class":519},[435,5811,2818],{"class":1296},[435,5813,947],{"class":912},[435,5815,1602],{"class":1246},[435,5817,5818],{"class":953},"last_activity_date",[435,5820,1608],{"class":1246},[435,5822,5823],{"class":912},"T00:00:00Z\"",[435,5825,836],{"class":519},[435,5827,5829,5831,5833],{"class":437,"line":5828},309,[435,5830,1437],{"class":441},[435,5832,5783],{"class":953},[435,5834,956],{"class":519},[435,5836,5838,5840,5842,5844],{"class":437,"line":5837},310,[435,5839,5237],{"class":1305},[435,5841,850],{"class":519},[435,5843,197],{"class":953},[435,5845,956],{"class":519},[435,5847,5849,5851,5853,5855,5857,5859,5861,5863,5866,5868,5871,5873,5875,5877,5879,5881,5883],{"class":437,"line":5848},311,[435,5850,5249],{"class":1305},[435,5852,850],{"class":519},[435,5854,2818],{"class":1296},[435,5856,947],{"class":912},[435,5858,1602],{"class":1246},[435,5860,5657],{"class":953},[435,5862,1608],{"class":1246},[435,5864,5865],{"class":912},"-",[435,5867,1602],{"class":1246},[435,5869,5870],{"class":953},"product_name",[435,5872,1608],{"class":1246},[435,5874,5865],{"class":912},[435,5876,1602],{"class":1246},[435,5878,5818],{"class":953},[435,5880,1608],{"class":1246},[435,5882,947],{"class":912},[435,5884,710],{"class":519},[435,5886,5888,5891,5893,5895],{"class":437,"line":5887},312,[435,5889,5890],{"class":1305},"            source_actor_id",[435,5892,850],{"class":519},[435,5894,5657],{"class":953},[435,5896,710],{"class":519},[435,5898,5900,5903,5905,5907],{"class":437,"line":5899},313,[435,5901,5902],{"class":1305},"            external_product_name",[435,5904,850],{"class":519},[435,5906,5870],{"class":953},[435,5908,710],{"class":519},[435,5910,5912,5915,5917,5920],{"class":437,"line":5911},314,[435,5913,5914],{"class":1305},"            last_activity",[435,5916,850],{"class":519},[435,5918,5919],{"class":953},"last_activity",[435,5921,710],{"class":519},[435,5923,5925],{"class":437,"line":5924},315,[435,5926,2143],{"class":519},[435,5928,5930],{"class":437,"line":5929},316,[435,5931,1803],{"class":519},[435,5933,5935],{"class":437,"line":5934},317,[435,5936,616],{"emptyLinePlaceholder":615},[435,5938,5940],{"class":437,"line":5939},318,[435,5941,616],{"emptyLinePlaceholder":615},[435,5943,5945,5947,5950,5952,5955,5957,5960,5962,5965,5967,5969,5971,5973,5975,5977,5979],{"class":437,"line":5944},319,[435,5946,1297],{"class":1296},[435,5948,5949],{"class":953}," usage_from_active_users_row",[435,5951,1271],{"class":519},[435,5953,5954],{"class":1305},"row",[435,5956,252],{"class":519},[435,5958,5959],{"class":445}," ReportRow",[435,5961,531],{"class":519},[435,5963,5964],{"class":1305}," user_id",[435,5966,252],{"class":519},[435,5968,890],{"class":884},[435,5970,1313],{"class":519},[435,5972,1316],{"class":519},[435,5974,2193],{"class":445},[435,5976,881],{"class":519},[435,5978,186],{"class":445},[435,5980,1330],{"class":519},[435,5982,5984,5986],{"class":437,"line":5983},320,[435,5985,1437],{"class":441},[435,5987,5088],{"class":519},[435,5989,5991,5994,5996,5998,6000,6003,6005,6008,6010,6013,6016,6018],{"class":437,"line":5990},321,[435,5992,5993],{"class":953},"        usage_record",[435,5995,1271],{"class":519},[435,5997,5657],{"class":953},[435,5999,531],{"class":519},[435,6001,6002],{"class":953}," column",[435,6004,520],{"class":519},[435,6006,6007],{"class":953},"removesuffix",[435,6009,1271],{"class":519},[435,6011,6012],{"class":953},"LAST_ACTIVITY_COLUMN_SUFFIX",[435,6014,6015],{"class":519},"),",[435,6017,5772],{"class":953},[435,6019,836],{"class":519},[435,6021,6023,6025,6027,6029,6032,6034,6037,6039,6041],{"class":437,"line":6022},322,[435,6024,5111],{"class":441},[435,6026,6002],{"class":445},[435,6028,531],{"class":519},[435,6030,6031],{"class":445}," last_activity_date ",[435,6033,1549],{"class":441},[435,6035,6036],{"class":445}," row",[435,6038,520],{"class":519},[435,6040,2188],{"class":953},[435,6042,3260],{"class":519},[435,6044,6046,6048,6050,6052,6055,6057,6059,6061,6063],{"class":437,"line":6045},323,[435,6047,4824],{"class":441},[435,6049,6002],{"class":445},[435,6051,520],{"class":519},[435,6053,6054],{"class":953},"endswith",[435,6056,1271],{"class":519},[435,6058,6012],{"class":953},[435,6060,1313],{"class":519},[435,6062,2298],{"class":519},[435,6064,6065],{"class":445}," last_activity_date\n",[435,6067,6069],{"class":437,"line":6068},324,[435,6070,5153],{"class":519},[435,6072,6074],{"class":437,"line":6073},325,[435,6075,616],{"emptyLinePlaceholder":615},[435,6077,6079],{"class":437,"line":6078},326,[435,6080,616],{"emptyLinePlaceholder":615},[435,6082,6084,6086,6089,6091,6093,6095,6097,6099,6101,6103,6105,6107,6109,6111,6113,6115],{"class":437,"line":6083},327,[435,6085,1297],{"class":1296},[435,6087,6088],{"class":953}," usage_from_apps_row",[435,6090,1271],{"class":519},[435,6092,5954],{"class":1305},[435,6094,252],{"class":519},[435,6096,5959],{"class":445},[435,6098,531],{"class":519},[435,6100,5964],{"class":1305},[435,6102,252],{"class":519},[435,6104,890],{"class":884},[435,6106,1313],{"class":519},[435,6108,1316],{"class":519},[435,6110,2193],{"class":445},[435,6112,881],{"class":519},[435,6114,186],{"class":445},[435,6116,1330],{"class":519},[435,6118,6120,6123,6125,6127,6129,6131,6133,6135,6137,6139],{"class":437,"line":6119},328,[435,6121,6122],{"class":445},"    last_activity_date ",[435,6124,850],{"class":519},[435,6126,6036],{"class":445},[435,6128,520],{"class":519},[435,6130,1823],{"class":953},[435,6132,1271],{"class":519},[435,6134,947],{"class":519},[435,6136,1166],{"class":912},[435,6138,947],{"class":519},[435,6140,836],{"class":519},[435,6142,6144,6146,6148,6150],{"class":437,"line":6143},329,[435,6145,1393],{"class":441},[435,6147,1396],{"class":519},[435,6149,5772],{"class":445},[435,6151,1364],{"class":519},[435,6153,6155,6157],{"class":437,"line":6154},330,[435,6156,3244],{"class":441},[435,6158,2428],{"class":519},[435,6160,6162,6164],{"class":437,"line":6161},331,[435,6163,1437],{"class":441},[435,6165,5088],{"class":519},[435,6167,6169,6171,6173,6175,6177,6179,6181,6183],{"class":437,"line":6168},332,[435,6170,5993],{"class":953},[435,6172,1271],{"class":519},[435,6174,5657],{"class":953},[435,6176,531],{"class":519},[435,6178,6002],{"class":953},[435,6180,531],{"class":519},[435,6182,5772],{"class":953},[435,6184,836],{"class":519},[435,6186,6188,6190,6192,6194,6197,6199,6201,6203,6205],{"class":437,"line":6187},333,[435,6189,5111],{"class":441},[435,6191,6002],{"class":445},[435,6193,531],{"class":519},[435,6195,6196],{"class":445}," used ",[435,6198,1549],{"class":441},[435,6200,6036],{"class":445},[435,6202,520],{"class":519},[435,6204,2188],{"class":953},[435,6206,3260],{"class":519},[435,6208,6210,6212,6215,6217,6219,6222,6225,6227,6230,6232,6235],{"class":437,"line":6209},334,[435,6211,4824],{"class":441},[435,6213,6214],{"class":445}," column ",[435,6216,1534],{"class":519},[435,6218,1537],{"class":519},[435,6220,6221],{"class":445}," APPS_REPORT_NON_APP_COLUMNS ",[435,6223,6224],{"class":519},"and",[435,6226,6196],{"class":445},[435,6228,6229],{"class":519},"==",[435,6231,909],{"class":519},[435,6233,6234],{"class":912},"Yes",[435,6236,916],{"class":519},[435,6238,6240],{"class":437,"line":6239},335,[435,6241,5153],{"class":519},[435,6243,6245],{"class":437,"line":6244},336,[435,6246,616],{"emptyLinePlaceholder":615},[435,6248,6250],{"class":437,"line":6249},337,[435,6251,616],{"emptyLinePlaceholder":615},[435,6253,6255,6257,6260],{"class":437,"line":6254},338,[435,6256,1297],{"class":1296},[435,6258,6259],{"class":953}," usage_from_report",[435,6261,956],{"class":519},[435,6263,6265,6268,6270,6272,6274,6276],{"class":437,"line":6264},339,[435,6266,6267],{"class":1305},"    rows",[435,6269,252],{"class":519},[435,6271,2193],{"class":445},[435,6273,881],{"class":519},[435,6275,2557],{"class":445},[435,6277,1684],{"class":519},[435,6279,6281,6284,6286,6288,6290,6292,6294,6296],{"class":437,"line":6280},340,[435,6282,6283],{"class":1305},"    user_ids",[435,6285,252],{"class":519},[435,6287,878],{"class":445},[435,6289,881],{"class":519},[435,6291,885],{"class":884},[435,6293,531],{"class":519},[435,6295,890],{"class":884},[435,6297,1684],{"class":519},[435,6299,6301,6304,6306,6308,6310,6312,6314,6316,6318,6320,6322,6324],{"class":437,"line":6300},341,[435,6302,6303],{"class":1305},"    usage_from_row",[435,6305,252],{"class":519},[435,6307,853],{"class":445},[435,6309,856],{"class":519},[435,6311,2557],{"class":445},[435,6313,531],{"class":519},[435,6315,890],{"class":884},[435,6317,862],{"class":519},[435,6319,2193],{"class":445},[435,6321,881],{"class":519},[435,6323,186],{"class":445},[435,6325,4386],{"class":519},[435,6327,6329,6331,6333,6335,6337,6339],{"class":437,"line":6328},342,[435,6330,1313],{"class":519},[435,6332,1316],{"class":519},[435,6334,2193],{"class":445},[435,6336,881],{"class":519},[435,6338,186],{"class":445},[435,6340,1330],{"class":519},[435,6342,6344,6347,6349,6351,6353,6355,6357,6359],{"class":437,"line":6343},343,[435,6345,6346],{"class":445},"    usage",[435,6348,252],{"class":519},[435,6350,2193],{"class":445},[435,6352,881],{"class":519},[435,6354,186],{"class":445},[435,6356,5500],{"class":519},[435,6358,2425],{"class":519},[435,6360,2428],{"class":519},[435,6362,6364,6367,6369],{"class":437,"line":6363},344,[435,6365,6366],{"class":445},"    skipped_rows ",[435,6368,850],{"class":519},[435,6370,6371],{"class":1246}," 0\n",[435,6373,6375,6377,6380,6382,6385],{"class":437,"line":6374},345,[435,6376,4917],{"class":441},[435,6378,6379],{"class":445}," row ",[435,6381,1549],{"class":441},[435,6383,6384],{"class":445}," rows",[435,6386,1364],{"class":519},[435,6388,6390,6393,6395,6398,6400,6402,6405,6407,6409,6411,6413,6415,6417,6419,6421,6423,6426,6428,6430],{"class":437,"line":6389},346,[435,6391,6392],{"class":445},"        user_id ",[435,6394,850],{"class":519},[435,6396,6397],{"class":445}," user_ids",[435,6399,520],{"class":519},[435,6401,1823],{"class":953},[435,6403,6404],{"class":519},"((",[435,6406,5954],{"class":953},[435,6408,520],{"class":519},[435,6410,1823],{"class":953},[435,6412,1271],{"class":519},[435,6414,947],{"class":519},[435,6416,1142],{"class":912},[435,6418,947],{"class":519},[435,6420,1313],{"class":519},[435,6422,1857],{"class":519},[435,6424,6425],{"class":519}," \"\"",[435,6427,1820],{"class":519},[435,6429,4710],{"class":953},[435,6431,6432],{"class":519},"())\n",[435,6434,6436,6438,6441,6443],{"class":437,"line":6435},347,[435,6437,4824],{"class":441},[435,6439,6440],{"class":445}," user_id ",[435,6442,2290],{"class":519},[435,6444,2462],{"class":519},[435,6446,6448,6451,6454],{"class":437,"line":6447},348,[435,6449,6450],{"class":445},"            skipped_rows ",[435,6452,6453],{"class":519},"+=",[435,6455,6456],{"class":1246}," 1\n",[435,6458,6460,6463],{"class":437,"line":6459},349,[435,6461,6462],{"class":441},"        else",[435,6464,1364],{"class":519},[435,6466,6468,6471,6473,6475,6477,6480,6482,6484,6486,6488],{"class":437,"line":6467},350,[435,6469,6470],{"class":445},"            usage",[435,6472,520],{"class":519},[435,6474,2497],{"class":953},[435,6476,1271],{"class":519},[435,6478,6479],{"class":953},"usage_from_row",[435,6481,1271],{"class":519},[435,6483,5954],{"class":953},[435,6485,531],{"class":519},[435,6487,5964],{"class":953},[435,6489,4997],{"class":519},[435,6491,6493,6495,6498],{"class":437,"line":6492},351,[435,6494,1393],{"class":441},[435,6496,6497],{"class":445}," skipped_rows",[435,6499,1364],{"class":519},[435,6501,6503,6505,6507,6509,6511,6513,6516,6519,6522,6524,6526,6528],{"class":437,"line":6502},352,[435,6504,4849],{"class":445},[435,6506,520],{"class":519},[435,6508,4311],{"class":953},[435,6510,1271],{"class":519},[435,6512,947],{"class":519},[435,6514,6515],{"class":912},"Skipped ",[435,6517,6518],{"class":1246},"%d",[435,6520,6521],{"class":912}," report rows that match no user",[435,6523,947],{"class":519},[435,6525,531],{"class":519},[435,6527,6497],{"class":953},[435,6529,836],{"class":519},[435,6531,6533,6535],{"class":437,"line":6532},353,[435,6534,1437],{"class":441},[435,6536,6537],{"class":445}," usage\n",[435,6539,6541],{"class":437,"line":6540},354,[435,6542,616],{"emptyLinePlaceholder":615},[435,6544,6546],{"class":437,"line":6545},355,[435,6547,616],{"emptyLinePlaceholder":615},[435,6549,6551,6553,6556,6558,6560,6562,6564,6566,6568,6570,6572,6574,6576,6578,6580,6582,6584,6586,6588,6590],{"class":437,"line":6550},356,[435,6552,1297],{"class":1296},[435,6554,6555],{"class":953}," fetch_usage",[435,6557,1271],{"class":519},[435,6559,1830],{"class":1305},[435,6561,252],{"class":519},[435,6563,890],{"class":884},[435,6565,531],{"class":519},[435,6567,6397],{"class":1305},[435,6569,252],{"class":519},[435,6571,878],{"class":445},[435,6573,881],{"class":519},[435,6575,885],{"class":884},[435,6577,531],{"class":519},[435,6579,890],{"class":884},[435,6581,3579],{"class":519},[435,6583,1316],{"class":519},[435,6585,2193],{"class":445},[435,6587,881],{"class":519},[435,6589,186],{"class":445},[435,6591,1330],{"class":519},[435,6593,6595,6597],{"class":437,"line":6594},357,[435,6596,4778],{"class":441},[435,6598,1364],{"class":519},[435,6600,6602,6605,6607,6609,6611,6614,6616,6618],{"class":437,"line":6601},358,[435,6603,6604],{"class":445},"        active_users_rows ",[435,6606,850],{"class":519},[435,6608,2530],{"class":953},[435,6610,1271],{"class":519},[435,6612,6613],{"class":953},"GRAPH_ACTIVE_USERS_REPORT_URL",[435,6615,531],{"class":519},[435,6617,1922],{"class":953},[435,6619,836],{"class":519},[435,6621,6623,6626,6628,6630,6632,6635,6637,6639],{"class":437,"line":6622},359,[435,6624,6625],{"class":445},"        apps_rows ",[435,6627,850],{"class":519},[435,6629,2530],{"class":953},[435,6631,1271],{"class":519},[435,6633,6634],{"class":953},"GRAPH_APPS_REPORT_URL",[435,6636,531],{"class":519},[435,6638,1922],{"class":953},[435,6640,836],{"class":519},[435,6642,6644,6646,6648,6650,6652],{"class":437,"line":6643},360,[435,6645,4807],{"class":441},[435,6647,4810],{"class":445},[435,6649,4813],{"class":441},[435,6651,4816],{"class":445},[435,6653,1364],{"class":519},[435,6655,6657,6659,6661,6663,6665,6667,6669],{"class":437,"line":6656},361,[435,6658,4824],{"class":441},[435,6660,4816],{"class":445},[435,6662,520],{"class":519},[435,6664,147],{"class":1483},[435,6666,1995],{"class":519},[435,6668,4835],{"class":1246},[435,6670,1364],{"class":519},[435,6672,6674],{"class":437,"line":6673},362,[435,6675,4843],{"class":441},[435,6677,6679,6681,6683,6685,6687,6689,6692,6694],{"class":437,"line":6678},363,[435,6680,4849],{"class":445},[435,6682,520],{"class":519},[435,6684,4311],{"class":953},[435,6686,1271],{"class":519},[435,6688,947],{"class":519},[435,6690,6691],{"class":912},"Reports.Read.All is not granted, so no usage is sent",[435,6693,947],{"class":519},[435,6695,836],{"class":519},[435,6697,6699,6701],{"class":437,"line":6698},364,[435,6700,3244],{"class":441},[435,6702,2428],{"class":519},[435,6704,6706,6708],{"class":437,"line":6705},365,[435,6707,1437],{"class":441},[435,6709,5088],{"class":519},[435,6711,6713,6716,6719,6721,6724,6726,6728,6730,6732],{"class":437,"line":6712},366,[435,6714,6715],{"class":519},"        *",[435,6717,6718],{"class":953},"usage_from_report",[435,6720,1271],{"class":519},[435,6722,6723],{"class":953},"active_users_rows",[435,6725,531],{"class":519},[435,6727,6397],{"class":953},[435,6729,531],{"class":519},[435,6731,5949],{"class":953},[435,6733,3622],{"class":519},[435,6735,6737,6739,6741,6743,6746,6748,6750,6752,6754],{"class":437,"line":6736},367,[435,6738,6715],{"class":519},[435,6740,6718],{"class":953},[435,6742,1271],{"class":519},[435,6744,6745],{"class":953},"apps_rows",[435,6747,531],{"class":519},[435,6749,6397],{"class":953},[435,6751,531],{"class":519},[435,6753,6088],{"class":953},[435,6755,3622],{"class":519},[435,6757,6759],{"class":437,"line":6758},368,[435,6760,5153],{"class":519},[435,6762,6764],{"class":437,"line":6763},369,[435,6765,616],{"emptyLinePlaceholder":615},[435,6767,6769],{"class":437,"line":6768},370,[435,6770,616],{"emptyLinePlaceholder":615},[435,6772,6774,6777,6780,6783,6785,6788,6790,6793,6795,6797,6799,6801,6803,6805,6807],{"class":437,"line":6773},371,[435,6775,6776],{"class":1296},"async",[435,6778,6779],{"class":1296}," def",[435,6781,6782],{"class":953}," sync_microsoft_licenses",[435,6784,1271],{"class":519},[435,6786,6787],{"class":1305},"write",[435,6789,252],{"class":519},[435,6791,6792],{"class":445}," Write",[435,6794,1313],{"class":519},[435,6796,1316],{"class":519},[435,6798,878],{"class":445},[435,6800,881],{"class":519},[435,6802,885],{"class":884},[435,6804,531],{"class":519},[435,6806,2992],{"class":884},[435,6808,1330],{"class":519},[435,6810,6812,6815,6817,6820,6823,6825,6828,6830,6833],{"class":437,"line":6811},372,[435,6813,6814],{"class":445},"    access_token ",[435,6816,850],{"class":519},[435,6818,6819],{"class":441}," await",[435,6821,6822],{"class":445}," asyncio",[435,6824,520],{"class":519},[435,6826,6827],{"class":953},"to_thread",[435,6829,1271],{"class":519},[435,6831,6832],{"class":953},"request_graph_token",[435,6834,836],{"class":519},[435,6836,6838,6841,6843,6845,6847,6849,6851,6853,6856,6858,6860],{"class":437,"line":6837},373,[435,6839,6840],{"class":445},"    plans ",[435,6842,850],{"class":519},[435,6844,6819],{"class":441},[435,6846,6822],{"class":445},[435,6848,520],{"class":519},[435,6850,6827],{"class":953},[435,6852,1271],{"class":519},[435,6854,6855],{"class":953},"fetch_plans",[435,6857,531],{"class":519},[435,6859,1922],{"class":953},[435,6861,836],{"class":519},[435,6863,6865,6868,6871,6873,6875,6877,6880,6882,6885,6887,6890,6892,6894],{"class":437,"line":6864},374,[435,6866,6867],{"class":441},"    await",[435,6869,6870],{"class":953}," write",[435,6872,1271],{"class":519},[435,6874,859],{"class":953},[435,6876,1271],{"class":519},[435,6878,6879],{"class":1305},"plans",[435,6881,850],{"class":519},[435,6883,6884],{"class":953},"PlanRecords",[435,6886,1271],{"class":519},[435,6888,6889],{"class":1305},"records",[435,6891,850],{"class":519},[435,6893,6879],{"class":953},[435,6895,2704],{"class":519},[435,6897,6899,6902,6904,6906,6909,6911,6914,6916,6918,6920,6922,6925,6928,6930,6932,6934,6936,6938,6941,6943,6946],{"class":437,"line":6898},375,[435,6900,6901],{"class":445},"    plan_ids ",[435,6903,850],{"class":519},[435,6905,1068],{"class":519},[435,6907,6908],{"class":445},"plan",[435,6910,520],{"class":519},[435,6912,6913],{"class":1483},"microsoft",[435,6915,520],{"class":519},[435,6917,4454],{"class":1483},[435,6919,520],{"class":519},[435,6921,4710],{"class":953},[435,6923,6924],{"class":519},"():",[435,6926,6927],{"class":445}," plan",[435,6929,520],{"class":519},[435,6931,6913],{"class":1483},[435,6933,520],{"class":519},[435,6935,4454],{"class":1483},[435,6937,2221],{"class":441},[435,6939,6940],{"class":445}," plan ",[435,6942,1549],{"class":441},[435,6944,6945],{"class":445}," plans",[435,6947,1096],{"class":519},[435,6949,6951],{"class":437,"line":6950},376,[435,6952,616],{"emptyLinePlaceholder":615},[435,6954,6956,6959,6961,6963,6965,6967,6969,6971,6974,6976,6978,6980,6982,6985,6987,6989,6992,6994,6996,6999,7001,7003,7005,7007,7009,7012,7014,7016,7018],{"class":437,"line":6955},377,[435,6957,6958],{"class":445},"    counts ",[435,6960,850],{"class":519},[435,6962,1068],{"class":519},[435,6964,947],{"class":519},[435,6966,6879],{"class":912},[435,6968,947],{"class":519},[435,6970,252],{"class":519},[435,6972,6973],{"class":953}," len",[435,6975,1271],{"class":519},[435,6977,6879],{"class":953},[435,6979,6015],{"class":519},[435,6981,909],{"class":519},[435,6983,6984],{"class":912},"accounts",[435,6986,947],{"class":519},[435,6988,252],{"class":519},[435,6990,6991],{"class":1246}," 0",[435,6993,531],{"class":519},[435,6995,909],{"class":519},[435,6997,6998],{"class":912},"licenses",[435,7000,947],{"class":519},[435,7002,252],{"class":519},[435,7004,6991],{"class":1246},[435,7006,531],{"class":519},[435,7008,909],{"class":519},[435,7010,7011],{"class":912},"usage",[435,7013,947],{"class":519},[435,7015,252],{"class":519},[435,7017,6991],{"class":1246},[435,7019,1096],{"class":519},[435,7021,7023,7025,7027,7029,7031,7033,7035,7037,7039,7041],{"class":437,"line":7022},378,[435,7024,6283],{"class":445},[435,7026,252],{"class":519},[435,7028,878],{"class":445},[435,7030,881],{"class":519},[435,7032,885],{"class":884},[435,7034,531],{"class":519},[435,7036,890],{"class":884},[435,7038,5500],{"class":519},[435,7040,2425],{"class":519},[435,7042,4872],{"class":519},[435,7044,7046,7048,7050,7052,7054,7056,7058],{"class":437,"line":7045},379,[435,7047,2434],{"class":445},[435,7049,252],{"class":519},[435,7051,890],{"class":884},[435,7053,1959],{"class":519},[435,7055,2295],{"class":519},[435,7057,2425],{"class":519},[435,7059,7060],{"class":445}," GRAPH_USERS_URL\n",[435,7062,7064,7066,7068,7070,7072],{"class":437,"line":7063},380,[435,7065,2453],{"class":441},[435,7067,2287],{"class":445},[435,7069,2290],{"class":519},[435,7071,1396],{"class":519},[435,7073,2462],{"class":519},[435,7075,7077,7080,7082,7084,7086,7088,7090,7092,7094,7096,7099,7101,7104,7106,7108],{"class":437,"line":7076},381,[435,7078,7079],{"class":445},"        users",[435,7081,531],{"class":519},[435,7083,2287],{"class":445},[435,7085,850],{"class":519},[435,7087,6819],{"class":441},[435,7089,6822],{"class":445},[435,7091,520],{"class":519},[435,7093,6827],{"class":953},[435,7095,1271],{"class":519},[435,7097,7098],{"class":953},"request_graph_page",[435,7100,531],{"class":519},[435,7102,7103],{"class":953}," next_url",[435,7105,531],{"class":519},[435,7107,1922],{"class":953},[435,7109,836],{"class":519},[435,7111,7113,7115,7118,7120,7123],{"class":437,"line":7112},382,[435,7114,5111],{"class":441},[435,7116,7117],{"class":445}," user ",[435,7119,1549],{"class":441},[435,7121,7122],{"class":445}," users",[435,7124,1364],{"class":519},[435,7126,7128,7131,7133,7135,7137,7139,7141,7143,7145,7147],{"class":437,"line":7127},383,[435,7129,7130],{"class":445},"            principal_name ",[435,7132,850],{"class":519},[435,7134,2857],{"class":953},[435,7136,1271],{"class":519},[435,7138,5176],{"class":953},[435,7140,531],{"class":519},[435,7142,909],{"class":519},[435,7144,5332],{"class":912},[435,7146,947],{"class":519},[435,7148,836],{"class":519},[435,7150,7152,7155,7158,7160,7162],{"class":437,"line":7151},384,[435,7153,7154],{"class":441},"            if",[435,7156,7157],{"class":445}," principal_name ",[435,7159,2290],{"class":519},[435,7161,1396],{"class":519},[435,7163,2462],{"class":519},[435,7165,7167,7170,7172,7175,7177,7179,7182,7184,7186,7188,7190,7192,7194,7196,7198],{"class":437,"line":7166},385,[435,7168,7169],{"class":445},"                user_ids",[435,7171,881],{"class":519},[435,7173,7174],{"class":445},"principal_name",[435,7176,520],{"class":519},[435,7178,4710],{"class":953},[435,7180,7181],{"class":519},"()]",[435,7183,2425],{"class":519},[435,7185,2722],{"class":953},[435,7187,1271],{"class":519},[435,7189,5176],{"class":953},[435,7191,531],{"class":519},[435,7193,909],{"class":519},[435,7195,3777],{"class":912},[435,7197,947],{"class":519},[435,7199,836],{"class":519},[435,7201,7203],{"class":437,"line":7202},386,[435,7204,616],{"emptyLinePlaceholder":615},[435,7206,7208,7211,7213,7215,7218,7220,7222,7224,7226,7228,7230,7232],{"class":437,"line":7207},387,[435,7209,7210],{"class":445},"        accounts ",[435,7212,850],{"class":519},[435,7214,3366],{"class":519},[435,7216,7217],{"class":953},"account_from_graph_user",[435,7219,1271],{"class":519},[435,7221,5176],{"class":953},[435,7223,1313],{"class":519},[435,7225,2221],{"class":441},[435,7227,7117],{"class":445},[435,7229,1549],{"class":441},[435,7231,7122],{"class":445},[435,7233,893],{"class":519},[435,7235,7237,7239,7242],{"class":437,"line":7236},388,[435,7238,4824],{"class":441},[435,7240,7241],{"class":445}," accounts",[435,7243,1364],{"class":519},[435,7245,7247,7250,7252,7254,7256,7258,7260,7262,7265,7267,7269,7271,7273],{"class":437,"line":7246},389,[435,7248,7249],{"class":441},"            await",[435,7251,6870],{"class":953},[435,7253,1271],{"class":519},[435,7255,859],{"class":953},[435,7257,1271],{"class":519},[435,7259,6984],{"class":1305},[435,7261,850],{"class":519},[435,7263,7264],{"class":953},"AccountRecords",[435,7266,1271],{"class":519},[435,7268,6889],{"class":1305},[435,7270,850],{"class":519},[435,7272,6984],{"class":953},[435,7274,2704],{"class":519},[435,7276,7278,7281,7283,7285,7287,7289,7291,7294,7296,7298,7300],{"class":437,"line":7277},390,[435,7279,7280],{"class":445},"            counts",[435,7282,881],{"class":519},[435,7284,947],{"class":519},[435,7286,6984],{"class":912},[435,7288,947],{"class":519},[435,7290,5500],{"class":519},[435,7292,7293],{"class":519}," +=",[435,7295,6973],{"class":953},[435,7297,1271],{"class":519},[435,7299,6984],{"class":953},[435,7301,836],{"class":519},[435,7303,7305],{"class":437,"line":7304},391,[435,7306,616],{"emptyLinePlaceholder":615},[435,7308,7310,7313,7315,7317,7320,7322,7324,7326,7329,7331,7334,7336,7338,7340,7342,7344,7346],{"class":437,"line":7309},392,[435,7311,7312],{"class":445},"        licenses ",[435,7314,850],{"class":519},[435,7316,3366],{"class":519},[435,7318,7319],{"class":445},"record ",[435,7321,1543],{"class":441},[435,7323,7117],{"class":445},[435,7325,1549],{"class":441},[435,7327,7328],{"class":445}," users ",[435,7330,1543],{"class":441},[435,7332,7333],{"class":445}," record ",[435,7335,1549],{"class":441},[435,7337,5414],{"class":953},[435,7339,1271],{"class":519},[435,7341,5176],{"class":953},[435,7343,531],{"class":519},[435,7345,5435],{"class":953},[435,7347,7348],{"class":519},")]\n",[435,7350,7352,7354,7357],{"class":437,"line":7351},393,[435,7353,4824],{"class":441},[435,7355,7356],{"class":445}," licenses",[435,7358,1364],{"class":519},[435,7360,7362,7364,7366,7368,7370,7372,7374,7376,7379,7381,7383,7385,7387],{"class":437,"line":7361},394,[435,7363,7249],{"class":441},[435,7365,6870],{"class":953},[435,7367,1271],{"class":519},[435,7369,859],{"class":953},[435,7371,1271],{"class":519},[435,7373,6998],{"class":1305},[435,7375,850],{"class":519},[435,7377,7378],{"class":953},"LicenseRecords",[435,7380,1271],{"class":519},[435,7382,6889],{"class":1305},[435,7384,850],{"class":519},[435,7386,6998],{"class":953},[435,7388,2704],{"class":519},[435,7390,7392,7394,7396,7398,7400,7402,7404,7406,7408,7410,7412],{"class":437,"line":7391},395,[435,7393,7280],{"class":445},[435,7395,881],{"class":519},[435,7397,947],{"class":519},[435,7399,6998],{"class":912},[435,7401,947],{"class":519},[435,7403,5500],{"class":519},[435,7405,7293],{"class":519},[435,7407,6973],{"class":953},[435,7409,1271],{"class":519},[435,7411,6998],{"class":953},[435,7413,836],{"class":519},[435,7415,7417],{"class":437,"line":7416},396,[435,7418,616],{"emptyLinePlaceholder":615},[435,7420,7422,7424,7427,7429,7431,7433,7435,7437,7440,7442],{"class":437,"line":7421},397,[435,7423,1393],{"class":441},[435,7425,7426],{"class":445}," counts",[435,7428,881],{"class":519},[435,7430,947],{"class":519},[435,7432,6984],{"class":912},[435,7434,947],{"class":519},[435,7436,5500],{"class":519},[435,7438,7439],{"class":519}," ==",[435,7441,6991],{"class":1246},[435,7443,1364],{"class":519},[435,7445,7447,7450,7452,7454,7456,7458,7460,7462,7464],{"class":437,"line":7446},398,[435,7448,7449],{"class":441},"        await",[435,7451,6870],{"class":953},[435,7453,1271],{"class":519},[435,7455,859],{"class":953},[435,7457,1271],{"class":519},[435,7459,6984],{"class":1305},[435,7461,850],{"class":519},[435,7463,7264],{"class":953},[435,7465,7466],{"class":519},"()))\n",[435,7468,7470,7472,7474,7476,7478,7480,7482,7484,7486,7488],{"class":437,"line":7469},399,[435,7471,1393],{"class":441},[435,7473,7426],{"class":445},[435,7475,881],{"class":519},[435,7477,947],{"class":519},[435,7479,6998],{"class":912},[435,7481,947],{"class":519},[435,7483,5500],{"class":519},[435,7485,7439],{"class":519},[435,7487,6991],{"class":1246},[435,7489,1364],{"class":519},[435,7491,7493,7495,7497,7499,7501,7503,7505,7507,7509],{"class":437,"line":7492},400,[435,7494,7449],{"class":441},[435,7496,6870],{"class":953},[435,7498,1271],{"class":519},[435,7500,859],{"class":953},[435,7502,1271],{"class":519},[435,7504,6998],{"class":1305},[435,7506,850],{"class":519},[435,7508,7378],{"class":953},[435,7510,7466],{"class":519},[435,7512,7514],{"class":437,"line":7513},401,[435,7515,616],{"emptyLinePlaceholder":615},[435,7517,7519,7522,7524,7526,7528,7530,7532,7534,7537,7539,7541,7543,7545],{"class":437,"line":7518},402,[435,7520,7521],{"class":445},"    usage ",[435,7523,850],{"class":519},[435,7525,6819],{"class":441},[435,7527,6822],{"class":445},[435,7529,520],{"class":519},[435,7531,6827],{"class":953},[435,7533,1271],{"class":519},[435,7535,7536],{"class":953},"fetch_usage",[435,7538,531],{"class":519},[435,7540,1922],{"class":953},[435,7542,531],{"class":519},[435,7544,6397],{"class":953},[435,7546,836],{"class":519},[435,7548,7550,7552,7555,7557,7560,7562,7565,7567,7569,7571,7573,7575,7578],{"class":437,"line":7549},403,[435,7551,4917],{"class":441},[435,7553,7554],{"class":445}," start ",[435,7556,1549],{"class":441},[435,7558,7559],{"class":953}," range",[435,7561,1271],{"class":519},[435,7563,7564],{"class":1246},"0",[435,7566,531],{"class":519},[435,7568,6973],{"class":953},[435,7570,1271],{"class":519},[435,7572,7011],{"class":953},[435,7574,6015],{"class":519},[435,7576,7577],{"class":953}," USAGE_RECORDS_PER_WRITE",[435,7579,1411],{"class":519},[435,7581,7583,7585,7587,7589,7591,7593,7595,7597,7600,7602,7604,7606,7608,7610,7613,7615,7617,7620,7622],{"class":437,"line":7582},404,[435,7584,7449],{"class":441},[435,7586,6870],{"class":953},[435,7588,1271],{"class":519},[435,7590,859],{"class":953},[435,7592,1271],{"class":519},[435,7594,7011],{"class":1305},[435,7596,850],{"class":519},[435,7598,7599],{"class":953},"UsageRecords",[435,7601,1271],{"class":519},[435,7603,6889],{"class":1305},[435,7605,850],{"class":519},[435,7607,7011],{"class":953},[435,7609,881],{"class":519},[435,7611,7612],{"class":953},"start ",[435,7614,252],{"class":519},[435,7616,7554],{"class":953},[435,7618,7619],{"class":519},"+",[435,7621,7577],{"class":953},[435,7623,7624],{"class":519},"])))\n",[435,7626,7628,7631,7633,7635,7637,7639,7641,7643,7645,7647,7649],{"class":437,"line":7627},405,[435,7629,7630],{"class":445},"    counts",[435,7632,881],{"class":519},[435,7634,947],{"class":519},[435,7636,7011],{"class":912},[435,7638,947],{"class":519},[435,7640,5500],{"class":519},[435,7642,2425],{"class":519},[435,7644,6973],{"class":953},[435,7646,1271],{"class":519},[435,7648,7011],{"class":953},[435,7650,836],{"class":519},[435,7652,7654,7656],{"class":437,"line":7653},406,[435,7655,1437],{"class":441},[435,7657,7658],{"class":445}," counts\n",[435,7660,7662],{"class":437,"line":7661},407,[435,7663,616],{"emptyLinePlaceholder":615},[435,7665,7667],{"class":437,"line":7666},408,[435,7668,616],{"emptyLinePlaceholder":615},[435,7670,7672,7674,7676,7679,7681,7684,7686,7688,7690,7693,7695,7697,7699,7701,7703,7705,7707,7709,7712,7714,7716,7718,7720,7722,7724],{"class":437,"line":7671},409,[435,7673,6776],{"class":1296},[435,7675,6779],{"class":1296},[435,7677,7678],{"class":953}," run_batch",[435,7680,1271],{"class":519},[435,7682,7683],{"class":1305},"sync",[435,7685,252],{"class":519},[435,7687,853],{"class":445},[435,7689,856],{"class":519},[435,7691,7692],{"class":445},"Write",[435,7694,862],{"class":519},[435,7696,528],{"class":445},[435,7698,881],{"class":519},[435,7700,1943],{"class":445},[435,7702,881],{"class":519},[435,7704,885],{"class":884},[435,7706,531],{"class":519},[435,7708,2992],{"class":884},[435,7710,7711],{"class":519},"]]])",[435,7713,1316],{"class":519},[435,7715,878],{"class":445},[435,7717,881],{"class":519},[435,7719,885],{"class":884},[435,7721,531],{"class":519},[435,7723,2992],{"class":884},[435,7725,1330],{"class":519},[435,7727,7729,7732,7734,7737],{"class":437,"line":7728},410,[435,7730,7731],{"class":445},"    options ",[435,7733,850],{"class":519},[435,7735,7736],{"class":953}," SyncApiClientOptions",[435,7738,956],{"class":519},[435,7740,7742,7745,7747,7750,7752,7754,7756,7758,7761,7763],{"class":437,"line":7741},411,[435,7743,7744],{"class":1305},"        endpoint",[435,7746,850],{"class":519},[435,7748,7749],{"class":953},"os",[435,7751,520],{"class":519},[435,7753,1484],{"class":1483},[435,7755,881],{"class":519},[435,7757,947],{"class":519},[435,7759,7760],{"class":912},"VIIO_SYNC_API_ENDPOINT",[435,7762,947],{"class":519},[435,7764,1684],{"class":519},[435,7766,7768,7771,7773,7776,7778,7781,7783,7785,7787,7789,7791,7793,7796,7798],{"class":437,"line":7767},412,[435,7769,7770],{"class":1305},"        authentication",[435,7772,850],{"class":519},[435,7774,7775],{"class":953},"SyncApiAuthentication",[435,7777,520],{"class":519},[435,7779,7780],{"class":953},"api_key",[435,7782,1271],{"class":519},[435,7784,7749],{"class":953},[435,7786,520],{"class":519},[435,7788,1484],{"class":1483},[435,7790,881],{"class":519},[435,7792,947],{"class":519},[435,7794,7795],{"class":912},"VIIO_SYNC_API_KEY",[435,7797,947],{"class":519},[435,7799,7800],{"class":519},"]),\n",[435,7802,7804],{"class":437,"line":7803},413,[435,7805,1803],{"class":519},[435,7807,7809],{"class":437,"line":7808},414,[435,7810,616],{"emptyLinePlaceholder":615},[435,7812,7814,7817,7820,7822,7824,7827,7829,7831,7834],{"class":437,"line":7813},415,[435,7815,7816],{"class":441},"    async",[435,7818,7819],{"class":441}," with",[435,7821,678],{"class":953},[435,7823,1271],{"class":519},[435,7825,7826],{"class":953},"options",[435,7828,1313],{"class":519},[435,7830,1358],{"class":441},[435,7832,7833],{"class":445}," client",[435,7835,1364],{"class":519},[435,7837,7839,7842,7844,7846,7848,7850,7853,7855,7857,7859,7861,7863,7865,7868,7870],{"class":437,"line":7838},416,[435,7840,7841],{"class":445},"        batch ",[435,7843,850],{"class":519},[435,7845,6819],{"class":441},[435,7847,7833],{"class":445},[435,7849,520],{"class":519},[435,7851,7852],{"class":953},"start_batch",[435,7854,1271],{"class":519},[435,7856,7749],{"class":953},[435,7858,520],{"class":519},[435,7860,1484],{"class":1483},[435,7862,881],{"class":519},[435,7864,947],{"class":519},[435,7866,7867],{"class":912},"VIIO_DIRECT_INTEGRATION_INSTALLATION_ID",[435,7869,947],{"class":519},[435,7871,7872],{"class":519},"])\n",[435,7874,7876,7879],{"class":437,"line":7875},417,[435,7877,7878],{"class":441},"        try",[435,7880,1364],{"class":519},[435,7882,7884,7887,7889,7891,7894,7896,7899,7901,7903],{"class":437,"line":7883},418,[435,7885,7886],{"class":445},"            counts ",[435,7888,850],{"class":519},[435,7890,6819],{"class":441},[435,7892,7893],{"class":953}," sync",[435,7895,1271],{"class":519},[435,7897,7898],{"class":953},"batch",[435,7900,520],{"class":519},[435,7902,6787],{"class":1483},[435,7904,836],{"class":519},[435,7906,7908,7910,7913,7915,7918],{"class":437,"line":7907},419,[435,7909,7249],{"class":441},[435,7911,7912],{"class":445}," batch",[435,7914,520],{"class":519},[435,7916,7917],{"class":953},"complete",[435,7919,3260],{"class":519},[435,7921,7923,7926,7929],{"class":437,"line":7922},420,[435,7924,7925],{"class":441},"        except",[435,7927,7928],{"class":884}," BaseException",[435,7930,1364],{"class":519},[435,7932,7934,7936,7938,7940,7943],{"class":437,"line":7933},421,[435,7935,7249],{"class":441},[435,7937,7912],{"class":445},[435,7939,520],{"class":519},[435,7941,7942],{"class":953},"abort",[435,7944,3260],{"class":519},[435,7946,7948],{"class":437,"line":7947},422,[435,7949,4843],{"class":441},[435,7951,7953,7955],{"class":437,"line":7952},423,[435,7954,1437],{"class":441},[435,7956,7658],{"class":445},[435,7958,7960],{"class":437,"line":7959},424,[435,7961,616],{"emptyLinePlaceholder":615},[435,7963,7965],{"class":437,"line":7964},425,[435,7966,616],{"emptyLinePlaceholder":615},[435,7968,7970,7972,7974,7977,7979,7981,7983,7986,7988,7990],{"class":437,"line":7969},426,[435,7971,6776],{"class":1296},[435,7973,6779],{"class":1296},[435,7975,7976],{"class":953}," print_request",[435,7978,1271],{"class":519},[435,7980,1306],{"class":1305},[435,7982,252],{"class":519},[435,7984,7985],{"class":445}," SyncRecordsRequest",[435,7987,1313],{"class":519},[435,7989,1316],{"class":519},[435,7991,2462],{"class":519},[435,7993,7995,7998,8000,8003,8005,8007],{"class":437,"line":7994},427,[435,7996,7997],{"class":953},"    print",[435,7999,1271],{"class":519},[435,8001,8002],{"class":953},"MessageToJson",[435,8004,1271],{"class":519},[435,8006,1306],{"class":953},[435,8008,4997],{"class":519},[435,8010,8012],{"class":437,"line":8011},428,[435,8013,616],{"emptyLinePlaceholder":615},[435,8015,8017],{"class":437,"line":8016},429,[435,8018,616],{"emptyLinePlaceholder":615},[435,8020,8022,8024,8026,8029,8031,8033],{"class":437,"line":8021},430,[435,8023,6776],{"class":1296},[435,8025,6779],{"class":1296},[435,8027,8028],{"class":953}," main",[435,8030,1461],{"class":519},[435,8032,1316],{"class":519},[435,8034,2462],{"class":519},[435,8036,8038,8041,8043,8046,8048,8051,8053,8056,8058,8060,8063,8065],{"class":437,"line":8037},431,[435,8039,8040],{"class":445},"    parser ",[435,8042,850],{"class":519},[435,8044,8045],{"class":445}," argparse",[435,8047,520],{"class":519},[435,8049,8050],{"class":953},"ArgumentParser",[435,8052,1271],{"class":519},[435,8054,8055],{"class":1305},"description",[435,8057,850],{"class":519},[435,8059,947],{"class":519},[435,8061,8062],{"class":912},"Sync Microsoft 365 plans, accounts, licenses, and usage to Viio",[435,8064,947],{"class":519},[435,8066,836],{"class":519},[435,8068,8070,8073,8075,8078,8080,8082,8085,8087,8089,8092,8094,8096,8099,8101,8103,8106,8108,8110,8113,8115],{"class":437,"line":8069},432,[435,8071,8072],{"class":445},"    parser",[435,8074,520],{"class":519},[435,8076,8077],{"class":953},"add_argument",[435,8079,1271],{"class":519},[435,8081,947],{"class":519},[435,8083,8084],{"class":912},"--dry-run",[435,8086,947],{"class":519},[435,8088,531],{"class":519},[435,8090,8091],{"class":1305}," action",[435,8093,850],{"class":519},[435,8095,947],{"class":519},[435,8097,8098],{"class":912},"store_true",[435,8100,947],{"class":519},[435,8102,531],{"class":519},[435,8104,8105],{"class":1305}," help",[435,8107,850],{"class":519},[435,8109,947],{"class":519},[435,8111,8112],{"class":912},"print the records instead of sending them",[435,8114,947],{"class":519},[435,8116,836],{"class":519},[435,8118,8120,8123,8125,8128,8130,8133],{"class":437,"line":8119},433,[435,8121,8122],{"class":445},"    arguments ",[435,8124,850],{"class":519},[435,8126,8127],{"class":445}," parser",[435,8129,520],{"class":519},[435,8131,8132],{"class":953},"parse_args",[435,8134,3260],{"class":519},[435,8136,8138],{"class":437,"line":8137},434,[435,8139,616],{"emptyLinePlaceholder":615},[435,8141,8143,8145,8147,8149,8152,8155,8157,8160,8162,8164,8167,8169,8172,8174,8176,8178,8180],{"class":437,"line":8142},435,[435,8144,6958],{"class":445},[435,8146,850],{"class":519},[435,8148,6819],{"class":441},[435,8150,8151],{"class":519}," (",[435,8153,8154],{"class":953},"sync_microsoft_licenses",[435,8156,1271],{"class":519},[435,8158,8159],{"class":953},"print_request",[435,8161,1313],{"class":519},[435,8163,3395],{"class":441},[435,8165,8166],{"class":445}," arguments",[435,8168,520],{"class":519},[435,8170,8171],{"class":1483},"dry_run",[435,8173,3056],{"class":441},[435,8175,7678],{"class":953},[435,8177,1271],{"class":519},[435,8179,8154],{"class":953},[435,8181,4997],{"class":519},[435,8183,8185,8188,8190,8193,8195,8197,8200,8203,8205,8207,8209],{"class":437,"line":8184},436,[435,8186,8187],{"class":445},"    logger",[435,8189,520],{"class":519},[435,8191,8192],{"class":953},"info",[435,8194,1271],{"class":519},[435,8196,947],{"class":519},[435,8198,8199],{"class":912},"Synced ",[435,8201,8202],{"class":1246},"%s",[435,8204,947],{"class":519},[435,8206,531],{"class":519},[435,8208,7426],{"class":953},[435,8210,836],{"class":519},[435,8212,8214],{"class":437,"line":8213},437,[435,8215,616],{"emptyLinePlaceholder":615},[435,8217,8219],{"class":437,"line":8218},438,[435,8220,616],{"emptyLinePlaceholder":615},[435,8222,8224,8226,8229,8231,8233,8236,8238],{"class":437,"line":8223},439,[435,8225,2921],{"class":441},[435,8227,8228],{"class":445}," __name__ ",[435,8230,6229],{"class":519},[435,8232,909],{"class":519},[435,8234,8235],{"class":912},"__main__",[435,8237,947],{"class":519},[435,8239,1364],{"class":519},[435,8241,8243,8246,8248,8251,8253,8256,8258,8261,8263,8266],{"class":437,"line":8242},440,[435,8244,8245],{"class":445},"    logging",[435,8247,520],{"class":519},[435,8249,8250],{"class":953},"basicConfig",[435,8252,1271],{"class":519},[435,8254,8255],{"class":1305},"level",[435,8257,850],{"class":519},[435,8259,8260],{"class":953},"logging",[435,8262,520],{"class":519},[435,8264,8265],{"class":1483},"INFO",[435,8267,836],{"class":519},[435,8269,8271,8274,8276,8279,8281,8284],{"class":437,"line":8270},441,[435,8272,8273],{"class":445},"    asyncio",[435,8275,520],{"class":519},[435,8277,8278],{"class":953},"run",[435,8280,1271],{"class":519},[435,8282,8283],{"class":953},"main",[435,8285,6432],{"class":519},[106,8287,8288],{},"The script follows the same rules as Viio's managed Microsoft integration:",[8290,8291,8292,8307,8313,8320,8331,8343,8349,8362,8381],"ul",{},[8293,8294,8295,8296,8298,8299,244,8301,8303,8304,8306],"li",{},"It skips SKUs whose ",[147,8297,4575],{}," is ",[147,8300,1073],{},[147,8302,1082],{},", or ",[147,8305,1091],{},", and doesn't send licenses for them. Viio removes those plans when the batch completes.",[8293,8308,8309,8310,8312],{},"It matches subscriptions to SKUs by ",[147,8311,4021],{},", ignoring case.",[8293,8314,8315,8316,8319],{},"It uses the SKU ID as the plan ID, and ",[147,8317,8318],{},"{userId}_{skuId}"," as the license ID, so later runs update the same records.",[8293,8321,8322,8323,8325,8326,8328,8329,520],{},"It sends the plan's Graph values unchanged. Viio derives the plan name from ",[147,8324,4046],{}," and the seat counts from ",[147,8327,4600],{}," and ",[147,8330,4174],{},[8293,8332,8333,8334,8336,8337,8339,8340,8342],{},"It uses the user's ",[147,8335,5313],{}," as the account email, or ",[147,8338,5332],{}," when ",[147,8341,5313],{}," is empty.",[8293,8344,8345,8346,8348],{},"It matches report rows to users by ",[147,8347,5332],{},", ignoring case, and skips rows without a match, such as rows for deleted users.",[8293,8350,8351,8352,8354,8355,8358,8359,520],{},"From the active users report, it sends one usage record for each service with a last activity date. The product name is the column name without ",[147,8353,1109],{},", such as ",[147,8356,8357],{},"Exchange"," or ",[147,8360,8361],{},"Teams",[8293,8363,8364,8365,8367,8368,8371,8372,244,8374,244,8376,248,8378,8380],{},"From the Microsoft 365 Apps report, it sends one usage record for each app column marked ",[147,8366,6234],{},", including platform-specific columns such as ",[147,8369,8370],{},"Outlook (Windows)",". It skips the ",[147,8373,1190],{},[147,8375,1202],{},[147,8377,1214],{},[147,8379,1226],{}," platform columns. This report has one last activity date per user, so every app gets that date.",[8293,8382,8383,8384,8387],{},"It uses ",[147,8385,8386],{},"{userId}-{product}-{lastActivityDate}"," as the usage ID. Viio publishes only activity that is newer than what it already has for the account and product, so resending the 180-day reports on every run doesn't create duplicates.",[106,8389,8390],{},"The plans go in one write. Each Graph page of up to 999 users becomes one accounts write and one licenses write. When a snapshot has no records, the script sends an empty wrapper, so Viio records it as intentionally empty. Usage follows the snapshots in writes of up to 1,000 records. Usage is event-based, so the script sends no usage write when the reports have no activity.",[106,8392,8393,8394,8396,8397,8399],{},"Microsoft Graph answers each report request with a redirect to a preauthenticated download URL. The script sets the ",[147,8395,2111],{}," header with ",[147,8398,2585],{},", so the access token isn't sent to the download host.",[234,8401,8403],{"id":8402},"run-the-script","Run the Script",[106,8405,8406],{},"Preview the records without contacting Viio:",[426,8408,8412],{"className":8409,"code":8410,"language":8411,"meta":431,"style":431},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python microsoft_licenses.py --dry-run\n","bash",[147,8413,8414],{"__ignoreMap":431},[435,8415,8416,8418,8421],{"class":437,"line":438},[435,8417,430],{"class":884},[435,8419,8420],{"class":912}," microsoft_licenses.py",[435,8422,8423],{"class":912}," --dry-run\n",[106,8425,8426],{},"The dry run prints each request as JSON. For one SKU and one user, the output looks like this, with the usage write shortened to two records:",[426,8428,8432],{"className":8429,"code":8430,"language":8431,"meta":431,"style":431},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"plans\": {\n    \"records\": [\n      {\n        \"microsoft\": {\n          \"skuId\": \"c7df2760-2c81-4ef7-b578-5b5392b571df\",\n          \"skuPartNumber\": \"ENTERPRISEPREMIUM\",\n          \"accountName\": \"Contoso\",\n          \"appliesTo\": \"User\",\n          \"capabilityStatus\": \"Enabled\",\n          \"consumedUnits\": 14,\n          \"prepaidUnits\": {\n            \"enabled\": 25,\n            \"lockedOut\": 0,\n            \"suspended\": 0,\n            \"warning\": 0\n          },\n          \"servicePlans\": [\n            {\n              \"servicePlanId\": \"8c098270-9dd4-4350-9b30-ba4703f3b36b\",\n              \"servicePlanName\": \"ADALLOM_S_O365\",\n              \"provisioningStatus\": \"Success\",\n              \"appliesTo\": \"Company\"\n            }\n          ],\n          \"subscriptionIds\": [\n            \"43d26afe-cb98-48b9-acc4-ae3ef2ac6c51\"\n          ],\n          \"subscriptions\": [\n            {\n              \"id\": \"43d26afe-cb98-48b9-acc4-ae3ef2ac6c51\",\n              \"commerceSubscriptionId\": \"f9c1ea2d-2c6e-4717-8c3b-7130812d70ba\",\n              \"createdDateTime\": \"2025-01-01T00:00:00Z\",\n              \"isTrial\": false,\n              \"nextLifecycleDateTime\": \"2027-01-01T00:00:00Z\",\n              \"skuId\": \"c7df2760-2c81-4ef7-b578-5b5392b571df\",\n              \"skuPartNumber\": \"ENTERPRISEPREMIUM\",\n              \"status\": \"Enabled\",\n              \"totalLicenses\": 25\n            }\n          ]\n        }\n      }\n    ]\n  }\n}\n{\n  \"accounts\": {\n    \"records\": [\n      {\n        \"generic\": {\n          \"id\": \"87d349ed-44d7-43e1-9a83-5f2406dee5bd\",\n          \"name\": \"Adele Vance\",\n          \"email\": \"adelev@contoso.com\",\n          \"active\": true,\n          \"type\": \"Member\"\n        }\n      }\n    ]\n  }\n}\n{\n  \"licenses\": {\n    \"records\": [\n      {\n        \"generic\": {\n          \"sourceAccountId\": \"87d349ed-44d7-43e1-9a83-5f2406dee5bd\",\n          \"sourcePlanId\": \"c7df2760-2c81-4ef7-b578-5b5392b571df\",\n          \"billable\": true,\n          \"sourceId\": \"87d349ed-44d7-43e1-9a83-5f2406dee5bd_c7df2760-2c81-4ef7-b578-5b5392b571df\"\n        }\n      }\n    ]\n  }\n}\n{\n  \"usage\": {\n    \"records\": [\n      {\n        \"generic\": {\n          \"id\": \"87d349ed-44d7-43e1-9a83-5f2406dee5bd-Exchange-2026-10-12\",\n          \"sourceActorId\": \"87d349ed-44d7-43e1-9a83-5f2406dee5bd\",\n          \"externalProductName\": \"Exchange\",\n          \"lastActivity\": \"2026-10-12T00:00:00Z\"\n        }\n      },\n      {\n        \"generic\": {\n          \"id\": \"87d349ed-44d7-43e1-9a83-5f2406dee5bd-Outlook-2026-10-13\",\n          \"sourceActorId\": \"87d349ed-44d7-43e1-9a83-5f2406dee5bd\",\n          \"externalProductName\": \"Outlook\",\n          \"lastActivity\": \"2026-10-13T00:00:00Z\"\n        }\n      }\n    ]\n  }\n}\n","json",[147,8433,8434,8439,8452,8464,8469,8481,8501,8520,8539,8558,8577,8592,8604,8621,8635,8649,8661,8666,8678,8682,8702,8721,8740,8757,8761,8766,8778,8787,8791,8804,8808,8826,8845,8864,8877,8896,8914,8932,8950,8963,8967,8972,8977,8982,8986,8991,8995,8999,9011,9023,9027,9040,9059,9079,9099,9113,9131,9135,9139,9143,9147,9151,9155,9167,9179,9183,9195,9214,9233,9246,9264,9268,9272,9276,9280,9284,9288,9300,9312,9316,9328,9347,9366,9385,9403,9407,9412,9416,9428,9447,9465,9484,9501,9505,9509,9513,9517],{"__ignoreMap":431},[435,8435,8436],{"class":437,"line":438},[435,8437,8438],{"class":519},"{\n",[435,8440,8441,8444,8446,8448,8450],{"class":437,"line":449},[435,8442,8443],{"class":519},"  \"",[435,8445,6879],{"class":1296},[435,8447,947],{"class":519},[435,8449,252],{"class":519},[435,8451,1122],{"class":519},[435,8453,8454,8456,8458,8460,8462],{"class":437,"line":457},[435,8455,1032],{"class":519},[435,8457,6889],{"class":884},[435,8459,947],{"class":519},[435,8461,252],{"class":519},[435,8463,5088],{"class":519},[435,8465,8466],{"class":437,"line":465},[435,8467,8468],{"class":519},"      {\n",[435,8470,8471,8473,8475,8477,8479],{"class":437,"line":473},[435,8472,968],{"class":519},[435,8474,6913],{"class":1246},[435,8476,947],{"class":519},[435,8478,252],{"class":519},[435,8480,1122],{"class":519},[435,8482,8483,8486,8488,8490,8492,8494,8497,8499],{"class":437,"line":481},[435,8484,8485],{"class":519},"          \"",[435,8487,4021],{"class":1483},[435,8489,947],{"class":519},[435,8491,252],{"class":519},[435,8493,909],{"class":519},[435,8495,8496],{"class":912},"c7df2760-2c81-4ef7-b578-5b5392b571df",[435,8498,947],{"class":519},[435,8500,710],{"class":519},[435,8502,8503,8505,8507,8509,8511,8513,8516,8518],{"class":437,"line":489},[435,8504,8485],{"class":519},[435,8506,4046],{"class":1483},[435,8508,947],{"class":519},[435,8510,252],{"class":519},[435,8512,909],{"class":519},[435,8514,8515],{"class":912},"ENTERPRISEPREMIUM",[435,8517,947],{"class":519},[435,8519,710],{"class":519},[435,8521,8522,8524,8526,8528,8530,8532,8535,8537],{"class":437,"line":497},[435,8523,8485],{"class":519},[435,8525,4526],{"class":1483},[435,8527,947],{"class":519},[435,8529,252],{"class":519},[435,8531,909],{"class":519},[435,8533,8534],{"class":912},"Contoso",[435,8536,947],{"class":519},[435,8538,710],{"class":519},[435,8540,8541,8543,8545,8547,8549,8551,8554,8556],{"class":437,"line":511},[435,8542,8485],{"class":519},[435,8544,3693],{"class":1483},[435,8546,947],{"class":519},[435,8548,252],{"class":519},[435,8550,909],{"class":519},[435,8552,8553],{"class":912},"User",[435,8555,947],{"class":519},[435,8557,710],{"class":519},[435,8559,8560,8562,8564,8566,8568,8570,8573,8575],{"class":437,"line":537},[435,8561,8485],{"class":519},[435,8563,4575],{"class":1483},[435,8565,947],{"class":519},[435,8567,252],{"class":519},[435,8569,909],{"class":519},[435,8571,8572],{"class":912},"Enabled",[435,8574,947],{"class":519},[435,8576,710],{"class":519},[435,8578,8579,8581,8583,8585,8587,8590],{"class":437,"line":550},[435,8580,8485],{"class":519},[435,8582,4600],{"class":1483},[435,8584,947],{"class":519},[435,8586,252],{"class":519},[435,8588,8589],{"class":1246}," 14",[435,8591,710],{"class":519},[435,8593,8594,8596,8598,8600,8602],{"class":437,"line":568},[435,8595,8485],{"class":519},[435,8597,4174],{"class":1483},[435,8599,947],{"class":519},[435,8601,252],{"class":519},[435,8603,1122],{"class":519},[435,8605,8606,8609,8612,8614,8616,8619],{"class":437,"line":590},[435,8607,8608],{"class":519},"            \"",[435,8610,4236],{"class":8611},"su27w",[435,8613,947],{"class":519},[435,8615,252],{"class":519},[435,8617,8618],{"class":1246}," 25",[435,8620,710],{"class":519},[435,8622,8623,8625,8627,8629,8631,8633],{"class":437,"line":612},[435,8624,8608],{"class":519},[435,8626,4261],{"class":8611},[435,8628,947],{"class":519},[435,8630,252],{"class":519},[435,8632,6991],{"class":1246},[435,8634,710],{"class":519},[435,8636,8637,8639,8641,8643,8645,8647],{"class":437,"line":619},[435,8638,8608],{"class":519},[435,8640,4286],{"class":8611},[435,8642,947],{"class":519},[435,8644,252],{"class":519},[435,8646,6991],{"class":1246},[435,8648,710],{"class":519},[435,8650,8651,8653,8655,8657,8659],{"class":437,"line":642},[435,8652,8608],{"class":519},[435,8654,4311],{"class":8611},[435,8656,947],{"class":519},[435,8658,252],{"class":519},[435,8660,6371],{"class":1246},[435,8662,8663],{"class":437,"line":663},[435,8664,8665],{"class":519},"          },\n",[435,8667,8668,8670,8672,8674,8676],{"class":437,"line":686},[435,8669,8485],{"class":519},[435,8671,4656],{"class":1483},[435,8673,947],{"class":519},[435,8675,252],{"class":519},[435,8677,5088],{"class":519},[435,8679,8680],{"class":437,"line":704},[435,8681,1632],{"class":519},[435,8683,8684,8687,8689,8691,8693,8695,8698,8700],{"class":437,"line":713},[435,8685,8686],{"class":519},"              \"",[435,8688,3617],{"class":8611},[435,8690,947],{"class":519},[435,8692,252],{"class":519},[435,8694,909],{"class":519},[435,8696,8697],{"class":912},"8c098270-9dd4-4350-9b30-ba4703f3b36b",[435,8699,947],{"class":519},[435,8701,710],{"class":519},[435,8703,8704,8706,8708,8710,8712,8714,8717,8719],{"class":437,"line":721},[435,8705,8686],{"class":519},[435,8707,3643],{"class":8611},[435,8709,947],{"class":519},[435,8711,252],{"class":519},[435,8713,909],{"class":519},[435,8715,8716],{"class":912},"ADALLOM_S_O365",[435,8718,947],{"class":519},[435,8720,710],{"class":519},[435,8722,8723,8725,8727,8729,8731,8733,8736,8738],{"class":437,"line":729},[435,8724,8686],{"class":519},[435,8726,3668],{"class":8611},[435,8728,947],{"class":519},[435,8730,252],{"class":519},[435,8732,909],{"class":519},[435,8734,8735],{"class":912},"Success",[435,8737,947],{"class":519},[435,8739,710],{"class":519},[435,8741,8742,8744,8746,8748,8750,8752,8755],{"class":437,"line":737},[435,8743,8686],{"class":519},[435,8745,3693],{"class":8611},[435,8747,947],{"class":519},[435,8749,252],{"class":519},[435,8751,909],{"class":519},[435,8753,8754],{"class":912},"Company",[435,8756,916],{"class":519},[435,8758,8759],{"class":437,"line":745},[435,8760,1740],{"class":519},[435,8762,8763],{"class":437,"line":753},[435,8764,8765],{"class":519},"          ],\n",[435,8767,8768,8770,8772,8774,8776],{"class":437,"line":761},[435,8769,8485],{"class":519},[435,8771,4682],{"class":1483},[435,8773,947],{"class":519},[435,8775,252],{"class":519},[435,8777,5088],{"class":519},[435,8779,8780,8782,8785],{"class":437,"line":769},[435,8781,8608],{"class":519},[435,8783,8784],{"class":912},"43d26afe-cb98-48b9-acc4-ae3ef2ac6c51",[435,8786,916],{"class":519},[435,8788,8789],{"class":437,"line":777},[435,8790,8765],{"class":519},[435,8792,8793,8795,8798,8800,8802],{"class":437,"line":785},[435,8794,8485],{"class":519},[435,8796,8797],{"class":1483},"subscriptions",[435,8799,947],{"class":519},[435,8801,252],{"class":519},[435,8803,5088],{"class":519},[435,8805,8806],{"class":437,"line":793},[435,8807,1632],{"class":519},[435,8809,8810,8812,8814,8816,8818,8820,8822,8824],{"class":437,"line":801},[435,8811,8686],{"class":519},[435,8813,3777],{"class":8611},[435,8815,947],{"class":519},[435,8817,252],{"class":519},[435,8819,909],{"class":519},[435,8821,8784],{"class":912},[435,8823,947],{"class":519},[435,8825,710],{"class":519},[435,8827,8828,8830,8832,8834,8836,8838,8841,8843],{"class":437,"line":809},[435,8829,8686],{"class":519},[435,8831,3802],{"class":8611},[435,8833,947],{"class":519},[435,8835,252],{"class":519},[435,8837,909],{"class":519},[435,8839,8840],{"class":912},"f9c1ea2d-2c6e-4717-8c3b-7130812d70ba",[435,8842,947],{"class":519},[435,8844,710],{"class":519},[435,8846,8847,8849,8851,8853,8855,8857,8860,8862],{"class":437,"line":817},[435,8848,8686],{"class":519},[435,8850,3828],{"class":8611},[435,8852,947],{"class":519},[435,8854,252],{"class":519},[435,8856,909],{"class":519},[435,8858,8859],{"class":912},"2025-01-01T00:00:00Z",[435,8861,947],{"class":519},[435,8863,710],{"class":519},[435,8865,8866,8868,8870,8872,8874],{"class":437,"line":825},[435,8867,8686],{"class":519},[435,8869,3854],{"class":8611},[435,8871,947],{"class":519},[435,8873,252],{"class":519},[435,8875,8876],{"class":519}," false,\n",[435,8878,8879,8881,8883,8885,8887,8889,8892,8894],{"class":437,"line":833},[435,8880,8686],{"class":519},[435,8882,3879],{"class":8611},[435,8884,947],{"class":519},[435,8886,252],{"class":519},[435,8888,909],{"class":519},[435,8890,8891],{"class":912},"2027-01-01T00:00:00Z",[435,8893,947],{"class":519},[435,8895,710],{"class":519},[435,8897,8898,8900,8902,8904,8906,8908,8910,8912],{"class":437,"line":839},[435,8899,8686],{"class":519},[435,8901,4021],{"class":8611},[435,8903,947],{"class":519},[435,8905,252],{"class":519},[435,8907,909],{"class":519},[435,8909,8496],{"class":912},[435,8911,947],{"class":519},[435,8913,710],{"class":519},[435,8915,8916,8918,8920,8922,8924,8926,8928,8930],{"class":437,"line":844},[435,8917,8686],{"class":519},[435,8919,4046],{"class":8611},[435,8921,947],{"class":519},[435,8923,252],{"class":519},[435,8925,909],{"class":519},[435,8927,8515],{"class":912},[435,8929,947],{"class":519},[435,8931,710],{"class":519},[435,8933,8934,8936,8938,8940,8942,8944,8946,8948],{"class":437,"line":870},[435,8935,8686],{"class":519},[435,8937,4071],{"class":8611},[435,8939,947],{"class":519},[435,8941,252],{"class":519},[435,8943,909],{"class":519},[435,8945,8572],{"class":912},[435,8947,947],{"class":519},[435,8949,710],{"class":519},[435,8951,8952,8954,8956,8958,8960],{"class":437,"line":896},[435,8953,8686],{"class":519},[435,8955,4097],{"class":8611},[435,8957,947],{"class":519},[435,8959,252],{"class":519},[435,8961,8962],{"class":1246}," 25\n",[435,8964,8965],{"class":437,"line":901},[435,8966,1740],{"class":519},[435,8968,8969],{"class":437,"line":919},[435,8970,8971],{"class":519},"          ]\n",[435,8973,8974],{"class":437,"line":934},[435,8975,8976],{"class":519},"        }\n",[435,8978,8979],{"class":437,"line":959},[435,8980,8981],{"class":519},"      }\n",[435,8983,8984],{"class":437,"line":965},[435,8985,5153],{"class":519},[435,8987,8988],{"class":437,"line":987},[435,8989,8990],{"class":519},"  }\n",[435,8992,8993],{"class":437,"line":1008},[435,8994,1096],{"class":519},[435,8996,8997],{"class":437,"line":1014},[435,8998,8438],{"class":519},[435,9000,9001,9003,9005,9007,9009],{"class":437,"line":1019},[435,9002,8443],{"class":519},[435,9004,6984],{"class":1296},[435,9006,947],{"class":519},[435,9008,252],{"class":519},[435,9010,1122],{"class":519},[435,9012,9013,9015,9017,9019,9021],{"class":437,"line":1029},[435,9014,1032],{"class":519},[435,9016,6889],{"class":884},[435,9018,947],{"class":519},[435,9020,252],{"class":519},[435,9022,5088],{"class":519},[435,9024,9025],{"class":437,"line":1040},[435,9026,8468],{"class":519},[435,9028,9029,9031,9034,9036,9038],{"class":437,"line":1045},[435,9030,968],{"class":519},[435,9032,9033],{"class":1246},"generic",[435,9035,947],{"class":519},[435,9037,252],{"class":519},[435,9039,1122],{"class":519},[435,9041,9042,9044,9046,9048,9050,9052,9055,9057],{"class":437,"line":1060},[435,9043,8485],{"class":519},[435,9045,3777],{"class":1483},[435,9047,947],{"class":519},[435,9049,252],{"class":519},[435,9051,909],{"class":519},[435,9053,9054],{"class":912},"87d349ed-44d7-43e1-9a83-5f2406dee5bd",[435,9056,947],{"class":519},[435,9058,710],{"class":519},[435,9060,9061,9063,9066,9068,9070,9072,9075,9077],{"class":437,"line":1099},[435,9062,8485],{"class":519},[435,9064,9065],{"class":1483},"name",[435,9067,947],{"class":519},[435,9069,252],{"class":519},[435,9071,909],{"class":519},[435,9073,9074],{"class":912},"Adele Vance",[435,9076,947],{"class":519},[435,9078,710],{"class":519},[435,9080,9081,9083,9086,9088,9090,9092,9095,9097],{"class":437,"line":1114},[435,9082,8485],{"class":519},[435,9084,9085],{"class":1483},"email",[435,9087,947],{"class":519},[435,9089,252],{"class":519},[435,9091,909],{"class":519},[435,9093,9094],{"class":912},"adelev@contoso.com",[435,9096,947],{"class":519},[435,9098,710],{"class":519},[435,9100,9101,9103,9106,9108,9110],{"class":437,"line":1125},[435,9102,8485],{"class":519},[435,9104,9105],{"class":1483},"active",[435,9107,947],{"class":519},[435,9109,252],{"class":519},[435,9111,9112],{"class":519}," true,\n",[435,9114,9115,9117,9120,9122,9124,9126,9129],{"class":437,"line":1137},[435,9116,8485],{"class":519},[435,9118,9119],{"class":1483},"type",[435,9121,947],{"class":519},[435,9123,252],{"class":519},[435,9125,909],{"class":519},[435,9127,9128],{"class":912},"Member",[435,9130,916],{"class":519},[435,9132,9133],{"class":437,"line":1149},[435,9134,8976],{"class":519},[435,9136,9137],{"class":437,"line":1161},[435,9138,8981],{"class":519},[435,9140,9141],{"class":437,"line":1173},[435,9142,5153],{"class":519},[435,9144,9145],{"class":437,"line":1185},[435,9146,8990],{"class":519},[435,9148,9149],{"class":437,"line":1197},[435,9150,1096],{"class":519},[435,9152,9153],{"class":437,"line":1209},[435,9154,8438],{"class":519},[435,9156,9157,9159,9161,9163,9165],{"class":437,"line":1221},[435,9158,8443],{"class":519},[435,9160,6998],{"class":1296},[435,9162,947],{"class":519},[435,9164,252],{"class":519},[435,9166,1122],{"class":519},[435,9168,9169,9171,9173,9175,9177],{"class":437,"line":1233},[435,9170,1032],{"class":519},[435,9172,6889],{"class":884},[435,9174,947],{"class":519},[435,9176,252],{"class":519},[435,9178,5088],{"class":519},[435,9180,9181],{"class":437,"line":1238},[435,9182,8468],{"class":519},[435,9184,9185,9187,9189,9191,9193],{"class":437,"line":1250},[435,9186,968],{"class":519},[435,9188,9033],{"class":1246},[435,9190,947],{"class":519},[435,9192,252],{"class":519},[435,9194,1122],{"class":519},[435,9196,9197,9199,9202,9204,9206,9208,9210,9212],{"class":437,"line":1255},[435,9198,8485],{"class":519},[435,9200,9201],{"class":1483},"sourceAccountId",[435,9203,947],{"class":519},[435,9205,252],{"class":519},[435,9207,909],{"class":519},[435,9209,9054],{"class":912},[435,9211,947],{"class":519},[435,9213,710],{"class":519},[435,9215,9216,9218,9221,9223,9225,9227,9229,9231],{"class":437,"line":1283},[435,9217,8485],{"class":519},[435,9219,9220],{"class":1483},"sourcePlanId",[435,9222,947],{"class":519},[435,9224,252],{"class":519},[435,9226,909],{"class":519},[435,9228,8496],{"class":912},[435,9230,947],{"class":519},[435,9232,710],{"class":519},[435,9234,9235,9237,9240,9242,9244],{"class":437,"line":1288},[435,9236,8485],{"class":519},[435,9238,9239],{"class":1483},"billable",[435,9241,947],{"class":519},[435,9243,252],{"class":519},[435,9245,9112],{"class":519},[435,9247,9248,9250,9253,9255,9257,9259,9262],{"class":437,"line":1293},[435,9249,8485],{"class":519},[435,9251,9252],{"class":1483},"sourceId",[435,9254,947],{"class":519},[435,9256,252],{"class":519},[435,9258,909],{"class":519},[435,9260,9261],{"class":912},"87d349ed-44d7-43e1-9a83-5f2406dee5bd_c7df2760-2c81-4ef7-b578-5b5392b571df",[435,9263,916],{"class":519},[435,9265,9266],{"class":437,"line":1333},[435,9267,8976],{"class":519},[435,9269,9270],{"class":437,"line":1367},[435,9271,8981],{"class":519},[435,9273,9274],{"class":437,"line":1390},[435,9275,5153],{"class":519},[435,9277,9278],{"class":437,"line":1414},[435,9279,8990],{"class":519},[435,9281,9282],{"class":437,"line":1434},[435,9283,1096],{"class":519},[435,9285,9286],{"class":437,"line":1443},[435,9287,8438],{"class":519},[435,9289,9290,9292,9294,9296,9298],{"class":437,"line":1448},[435,9291,8443],{"class":519},[435,9293,7011],{"class":1296},[435,9295,947],{"class":519},[435,9297,252],{"class":519},[435,9299,1122],{"class":519},[435,9301,9302,9304,9306,9308,9310],{"class":437,"line":1453},[435,9303,1032],{"class":519},[435,9305,6889],{"class":884},[435,9307,947],{"class":519},[435,9309,252],{"class":519},[435,9311,5088],{"class":519},[435,9313,9314],{"class":437,"line":1470},[435,9315,8468],{"class":519},[435,9317,9318,9320,9322,9324,9326],{"class":437,"line":1498},[435,9319,968],{"class":519},[435,9321,9033],{"class":1246},[435,9323,947],{"class":519},[435,9325,252],{"class":519},[435,9327,1122],{"class":519},[435,9329,9330,9332,9334,9336,9338,9340,9343,9345],{"class":437,"line":1513},[435,9331,8485],{"class":519},[435,9333,3777],{"class":1483},[435,9335,947],{"class":519},[435,9337,252],{"class":519},[435,9339,909],{"class":519},[435,9341,9342],{"class":912},"87d349ed-44d7-43e1-9a83-5f2406dee5bd-Exchange-2026-10-12",[435,9344,947],{"class":519},[435,9346,710],{"class":519},[435,9348,9349,9351,9354,9356,9358,9360,9362,9364],{"class":437,"line":1557},[435,9350,8485],{"class":519},[435,9352,9353],{"class":1483},"sourceActorId",[435,9355,947],{"class":519},[435,9357,252],{"class":519},[435,9359,909],{"class":519},[435,9361,9054],{"class":912},[435,9363,947],{"class":519},[435,9365,710],{"class":519},[435,9367,9368,9370,9373,9375,9377,9379,9381,9383],{"class":437,"line":1576},[435,9369,8485],{"class":519},[435,9371,9372],{"class":1483},"externalProductName",[435,9374,947],{"class":519},[435,9376,252],{"class":519},[435,9378,909],{"class":519},[435,9380,8357],{"class":912},[435,9382,947],{"class":519},[435,9384,710],{"class":519},[435,9386,9387,9389,9392,9394,9396,9398,9401],{"class":437,"line":1581},[435,9388,8485],{"class":519},[435,9390,9391],{"class":1483},"lastActivity",[435,9393,947],{"class":519},[435,9395,252],{"class":519},[435,9397,909],{"class":519},[435,9399,9400],{"class":912},"2026-10-12T00:00:00Z",[435,9402,916],{"class":519},[435,9404,9405],{"class":437,"line":1593},[435,9406,8976],{"class":519},[435,9408,9409],{"class":437,"line":1616},[435,9410,9411],{"class":519},"      },\n",[435,9413,9414],{"class":437,"line":1629},[435,9415,8468],{"class":519},[435,9417,9418,9420,9422,9424,9426],{"class":437,"line":1635},[435,9419,968],{"class":519},[435,9421,9033],{"class":1246},[435,9423,947],{"class":519},[435,9425,252],{"class":519},[435,9427,1122],{"class":519},[435,9429,9430,9432,9434,9436,9438,9440,9443,9445],{"class":437,"line":1657},[435,9431,8485],{"class":519},[435,9433,3777],{"class":1483},[435,9435,947],{"class":519},[435,9437,252],{"class":519},[435,9439,909],{"class":519},[435,9441,9442],{"class":912},"87d349ed-44d7-43e1-9a83-5f2406dee5bd-Outlook-2026-10-13",[435,9444,947],{"class":519},[435,9446,710],{"class":519},[435,9448,9449,9451,9453,9455,9457,9459,9461,9463],{"class":437,"line":1687},[435,9450,8485],{"class":519},[435,9452,9353],{"class":1483},[435,9454,947],{"class":519},[435,9456,252],{"class":519},[435,9458,909],{"class":519},[435,9460,9054],{"class":912},[435,9462,947],{"class":519},[435,9464,710],{"class":519},[435,9466,9467,9469,9471,9473,9475,9477,9480,9482],{"class":437,"line":1716},[435,9468,8485],{"class":519},[435,9470,9372],{"class":1483},[435,9472,947],{"class":519},[435,9474,252],{"class":519},[435,9476,909],{"class":519},[435,9478,9479],{"class":912},"Outlook",[435,9481,947],{"class":519},[435,9483,710],{"class":519},[435,9485,9486,9488,9490,9492,9494,9496,9499],{"class":437,"line":1737},[435,9487,8485],{"class":519},[435,9489,9391],{"class":1483},[435,9491,947],{"class":519},[435,9493,252],{"class":519},[435,9495,909],{"class":519},[435,9497,9498],{"class":912},"2026-10-13T00:00:00Z",[435,9500,916],{"class":519},[435,9502,9503],{"class":437,"line":1743},[435,9504,8976],{"class":519},[435,9506,9507],{"class":437,"line":1755},[435,9508,8981],{"class":519},[435,9510,9511],{"class":437,"line":1783},[435,9512,5153],{"class":519},[435,9514,9515],{"class":437,"line":1800},[435,9516,8990],{"class":519},[435,9518,9519],{"class":437,"line":1806},[435,9520,1096],{"class":519},[106,9522,9523],{},"Send the snapshot and usage to Viio:",[426,9525,9527],{"className":8409,"code":9526,"language":8411,"meta":431,"style":431},"python microsoft_licenses.py\n",[147,9528,9529],{"__ignoreMap":431},[435,9530,9531,9533],{"class":437,"line":438},[435,9532,430],{"class":884},[435,9534,9535],{"class":912}," microsoft_licenses.py\n",[106,9537,9538,9539,9543],{},"If a Microsoft Graph or Sync API call fails, the script aborts the batch and raises the error. Aborting doesn't remove any records, because Viio reconciles snapshots only when a batch completes. See the ",[143,9540,9542],{"href":9541},"\u002Fsync-api\u002Fquickstart#retry-strategy","quickstart"," for the retry sequence.",[9545,9546],"read-more",{"title":9547,"to":9548},"Next: run the syncs on AWS Lambda","\u002Fsync-api\u002Fexamples\u002Faws-lambda-python",[9545,9550],{"title":9551,"to":9552},"Browse plan and license models","\u002Fsync-api\u002Fapi-reference\u002Fmodels#plans-and-licenses",[9545,9554],{"title":9555,"to":194},"Browse usage models",[9557,9558,9559],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}",{"title":431,"searchDepth":438,"depth":449,"links":9561},[9562,9563,9564],{"id":236,"depth":449,"text":237},{"id":417,"depth":449,"text":418},{"id":8402,"depth":449,"text":8403},"2026-10-15","2026-10-06","Send Microsoft 365 plans, accounts, licenses, and app usage to Viio with the Python SDK, including service plans and subscriptions.","md",null,{},false,"\u002Fsync-api\u002Fexamples\u002Fmicrosoft-licenses-python",{"title":9574,"description":9575},"Sync Microsoft 365 Licenses and Usage to Viio with Python","Build a Python job that reads Microsoft Graph subscribed SKUs, company subscriptions, user license assignments, and Microsoft 365 usage reports and sends them to Viio.","3.sync-api\u002F6.examples\u002F3.microsoft-licenses-python","ewh7umGdixP4ungXfPdb0634lO5tHYAIlLt2SdQ9iy0",[9569,9569],1792747810025]