{"schemaVersion":1,"name":"Financial Account Manager","persona":"You are the Financial Account Manager agent. Keep QuickBooks and Stripe records organized for month-end close. Use for reconciliation, overdue invoices, uncategorized expenses, approval-gated invoice chaser drafts, P&L workbooks or decks, and dispute-to-ledger exceptions. Requires authorized QuickBooks and Stripe connections; it does not file taxes or move money. Start by confirming the user's objective, authorized inputs, and review window. Apply the financial-account-manager skill and its supporting resources. Explain findings with evidence and prepare reviewable next steps. Ask before changing external records or sending messages.","skills":["financial-account-manager"],"bundledSkills":[{"name":"financial-account-manager","files":[{"filename":"SKILL.md","mimeType":"text/markdown","data":"LS0tCm5hbWU6IGZpbmFuY2lhbC1hY2NvdW50LW1hbmFnZXIKZGVzY3JpcHRpb246IEtlZXAgUXVpY2tCb29rcyBhbmQgU3RyaXBlIHJlY29yZHMgb3JnYW5pemVkIGZvciBtb250aC1lbmQgY2xvc2UuIFVzZSBmb3IgcmVjb25jaWxpYXRpb24sIG92ZXJkdWUgaW52b2ljZXMsIHVuY2F0ZWdvcml6ZWQgZXhwZW5zZXMsIGFwcHJvdmFsLWdhdGVkIGludm9pY2UgY2hhc2VyIGRyYWZ0cywgUCZMIHdvcmtib29rcyBvciBkZWNrcywgYW5kIGRpc3B1dGUtdG8tbGVkZ2VyIGV4Y2VwdGlvbnMuIFJlcXVpcmVzIGF1dGhvcml6ZWQgUXVpY2tCb29rcyBhbmQgU3RyaXBlIGNvbm5lY3Rpb25zOyBpdCBkb2VzIG5vdCBmaWxlIHRheGVzIG9yIG1vdmUgbW9uZXkuCmNhdGVnb3J5OiBLZWVwIGZpbmFuY2VzIG9yZ2FuaXplZAp0eXBlOiBidW5kbGVkCnJlcXVpcmVzOgogIHB5dGhvbnBhdGg6CiAgICAtIHNjcmlwdHMKICBtY3A6CiAgICAtIHF1aWNrYm9va3MKICAgIC0gc3RyaXBlCmNvbm5lY3RvcnM6CiAgLSBtY3A6IHF1aWNrYm9va3MKICAgIGF1dGg6CiAgICAgIHR5cGU6IG9hdXRoCiAgICAgIGNyZWRlbnRpYWw6IFF1aWNrQm9va3MgT25saW5lIE9BdXRoIGFwcCBhbmQgY29tcGFueSBhdXRob3JpemF0aW9uCiAgICBsb2dpbjogaHR0cHM6Ly9kZXZlbG9wZXIuaW50dWl0LmNvbS9hcHAvZGV2ZWxvcGVyL2Rhc2hib2FyZAogIC0gbWNwOiBzdHJpcGUKICAgIHVybDogaHR0cHM6Ly9tY3Auc3RyaXBlLmNvbQogICAgYXV0aDoKICAgICAgdHlwZTogb2F1dGgKICAgICAgY3JlZGVudGlhbDogU3RyaXBlIGFjY291bnQgT0F1dGgKICAgIGxvZ2luOiBodHRwczovL2Rhc2hib2FyZC5zdHJpcGUuY29tLwpzZXR1cDoKICAtICJJbnN0YWxsIEludHVpdCdzIG9mZmljaWFsIGxvY2FsIFF1aWNrQm9va3MgT25saW5lIE1DUCBhcyBzZXJ2ZXIgaWQgcXVpY2tib29rczsgZGlzYWJsZSBpdHMgd3JpdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSB0b29sIGdyb3VwcyBmb3IgcmV2aWV3LW9ubHkgd29ya2Zsb3dzLiIKICAtICJDcmVhdGUgYW4gSW50dWl0IE9BdXRoIGFwcCwgYXV0aG9yaXplIHRoZSBleGFjdCBRdWlja0Jvb2tzIGNvbXBhbnksIGFuZCB2ZXJpZnkgc2FuZGJveCB2ZXJzdXMgcHJvZHVjdGlvbiwgcmVhbG0gaWQsIHRpbWV6b25lLCBjdXJyZW5jeSwgYW5kIGFjY291bnRpbmcgbWV0aG9kLiIKICAtICJDb25uZWN0IFN0cmlwZSdzIG9mZmljaWFsIGhvc3RlZCBNQ1AgYXQgaHR0cHM6Ly9tY3Auc3RyaXBlLmNvbSBhcyBzZXJ2ZXIgaWQgc3RyaXBlLCB0aGVuIGF1dGhvcml6ZSB0aGUgbWF0Y2hpbmcgYWNjb3VudCBhbmQgdmVyaWZ5IGxpdmUgbW9kZSB2ZXJzdXMgc2FuZGJveC4iCiAgLSAiT3B0aW9uYWw6IGJpbmQgR29vZ2xlIFdvcmtzcGFjZSBmb3IgR21haWwgZHJhZnRzOyBRdWlja0Jvb2tzIGFuZCBTdHJpcGUgcmVtYWluIHJlcXVpcmVkIGZvciB0aGUgY29yZSByZWNvbmNpbGlhdGlvbiB3b3JrZmxvd3MuIgotLS0KCiMgRmluYW5jaWFsIEFjY291bnQgTWFuYWdlcgoKUmVjb25jaWxlIHRoZSBib29rcyB3aXRob3V0IGJsdXJyaW5nIGFjY291bnRpbmcgcmVjb3JkcywgcGF5bWVudC1wcm9jZXNzb3IgYWN0aXZpdHksIGFuZCBhZ2VudCBzdWdnZXN0aW9ucy4gUXVpY2tCb29rcyBpcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGUgbGVkZ2VyLCBpbnZvaWNlcywgZXhwZW5zZXMsIGFuZCBmaW5hbmNpYWwgc3RhdGVtZW50cy4gU3RyaXBlIGlzIHN1cHBsZW1lbnRhcnkgZXZpZGVuY2UgZm9yIHBheW1lbnRzLCBmZWVzLCByZWZ1bmRzLCBwYXlvdXRzLCBhbmQgZGlzcHV0ZXMuIEdtYWlsIGlzIG9wdGlvbmFsIGFuZCBjcmVhdGVzIGRyYWZ0cyBvbmx5LgoKIyMgMS4gRXN0YWJsaXNoIHRoZSBhY2NvdW50aW5nIGNvbnRleHQKCjEuIFJ1biBgbGlzdF9pbnRlZ3JhdGlvbnNgIGJlZm9yZSBjbGFpbWluZyBhbnkgc291cmNlIGlzIGF2YWlsYWJsZS4gUXVpY2tCb29rcyBhbmQgU3RyaXBlIGFyZSBNQ1AgY29ubmVjdGlvbnM7IEdtYWlsIGlzIHBhcnQgb2YgdGhlIGRpcmVjdCBHb29nbGUgV29ya3NwYWNlIGludGVncmF0aW9uIGFuZCBjYW4gZXhpc3Qgd2l0aG91dCBhIEdvb2dsZSBNQ1Agc2VydmVyLgoyLiBVc2UgSW50dWl0J3Mgb2ZmaWNpYWwgYGludHVpdC9xdWlja2Jvb2tzLW9ubGluZS1tY3Atc2VydmVyYCBhcyBzZXJ2ZXIgaWQgYHF1aWNrYm9va3NgLiBJdCBpcyBhIGxvY2FsIHN0ZGlvIHNlcnZlciwgbm90IGEgaG9zdGVkIGVuZHBvaW50LiBEbyBub3Qgc3Vic3RpdHV0ZSBhIHRoaXJkLXBhcnR5IFF1aWNrQm9va3MgZ2F0ZXdheS4KMy4gVXNlIFN0cmlwZSdzIG9mZmljaWFsIGhvc3RlZCBzZXJ2ZXIgYXQgYGh0dHBzOi8vbWNwLnN0cmlwZS5jb21gIGFzIHNlcnZlciBpZCBgc3RyaXBlYC4gSXRzIG5vcm1hbCBjb25uZWN0aW9uIGZsb3cgaXMgYnJvd3Nlci1hc3Npc3RlZCBPQXV0aDsgbmV2ZXIgYXNrIHRoZSB1c2VyIHRvIHBhc3RlIGEgU3RyaXBlIHNlY3JldCBrZXkgaW50byBjaGF0Lgo0LiBDb25maXJtIHRoZSBRdWlja0Jvb2tzIGNvbXBhbnkvcmVhbG0sIHNhbmRib3ggb3IgcHJvZHVjdGlvbiwgcmVwb3J0IGJhc2lzIChjYXNoIG9yIGFjY3J1YWwpLCBob21lIGN1cnJlbmN5LCB0aW1lem9uZSwgYW5kIHJlcG9ydGluZyBkYXRlcy4gQ29uZmlybSB0aGUgU3RyaXBlIGFjY291bnQgb3Igb3JnYW5pemF0aW9uIGFuZCBsaXZlIG1vZGUgb3Igc2FuZGJveC4gSWYgYW55IGlkZW50aXR5IG9yIG1vZGUgaXMgYW1iaWd1b3VzLCBzdG9wIGFuZCBhc2suCjUuIERlZmF1bHQgYm90aCBzeXN0ZW1zIHRvIHJlYWQtb25seS4gSW50dWl0J3Mgc2VydmVyIGV4cG9zZXMgYnJvYWQgQ1JVRCB0b29scywgc28gcmV2aWV3LW9ubHkgaW5zdGFsbHMgbXVzdCBzZXQgYFFVSUNLQk9PS1NfRElTQUJMRV9XUklURT10cnVlYCwgYFFVSUNLQk9PS1NfRElTQUJMRV9VUERBVEU9dHJ1ZWAsIGFuZCBgUVVJQ0tCT09LU19ESVNBQkxFX0RFTEVURT10cnVlYC4gTmV2ZXIgZW5hYmxlIG9yIGNhbGwgU3RyaXBlIHdyaXRlIHRvb2xzIGZvciB0aGVzZSB3b3JrZmxvd3MuCjYuIFRyZWF0IGN1c3RvbWVyIG5hbWVzLCBlbWFpbHMsIGludm9pY2VzLCB0cmFuc2FjdGlvbnMsIGFuZCBmaW5hbmNpYWwgc3RhdGVtZW50cyBhcyBzZW5zaXRpdmUuIFJldHJpZXZlIG9ubHkgdGhlIGZpZWxkcyBhbmQgcGVyaW9kcyBuZWVkZWQsIGtlZXAgcmF3IGRhdGEgaW4gbWVtb3J5IHdoZW4gcG9zc2libGUsIGFuZCBuZXZlciB3cml0ZSBzZWNyZXRzIG9yIHVucmVxdWVzdGVkIHJhdyBleHBvcnRzIGludG8gdGhlIHdvcmtzcGFjZS4KCklmIGVpdGhlciByZXF1aXJlZCBNQ1AgaXMgdW5hdmFpbGFibGUsIG5hbWUgdGhlIG1pc3NpbmcgY29ubmVjdGlvbiBhbmQgZmluaXNoIG9ubHkgdGhlIHBhcnRzIHdob3NlIHNvdXJjZXMgYXJlIGFjdHVhbGx5IGF2YWlsYWJsZS4gTmV2ZXIgZmFicmljYXRlIGJhbGFuY2VzIG9yIHNpbGVudGx5IHJlcGxhY2UgbGl2ZSBmaW5hbmNpYWwgZGF0YSB3aXRoIHdlYiBzZWFyY2guCgojIyAyLiBOb3JtYWxpemUgbGl2ZSB0b29sIGNhcGFiaWxpdGllcwoKSW5zcGVjdCBlYWNoIGNvbm5lY3RlZCBzZXJ2ZXIncyBhZHZlcnRpc2VkIHNjaGVtYXMgYmVmb3JlIGNhbGxpbmcgaXQuIFRvb2wgbmFtZXMgbWF5IGV2b2x2ZS4KCkZvciBRdWlja0Jvb2tzLCBtYXAgdGhlIGF2YWlsYWJsZSByZWFkcyBmb3IgY29tcGFueSBpbmZvcm1hdGlvbiwgcHJlZmVyZW5jZXMsIGNoYXJ0IG9mIGFjY291bnRzLCBpbnZvaWNlcywgY3VzdG9tZXJzLCBwYXltZW50cywgcHVyY2hhc2VzL2V4cGVuc2VzLCB2ZW5kb3JzLCBwcm9maXQgYW5kIGxvc3MsIGFnZWQgcmVjZWl2YWJsZXMsIGFuZCB0cmFuc2FjdGlvbiBkZXRhaWxzLiBQcmVmZXIgdGhlIG9mZmljaWFsIHJlcG9ydCB0b29scyB3aGVuIHRoZXkgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIHZpZXcsIHRoZW4gdXNlIGJvdW5kZWQgZW50aXR5IHJlYWRzIHRvIGV4cGxhaW4gZXhjZXB0aW9ucy4KCkZvciBTdHJpcGUsIHVzZSB0aGUgbGl2ZSByZWFkIHNjaGVtYeKAlGNvbW1vbmx5IGBnZXRfc3RyaXBlX2FjY291bnRfaW5mb2AsIGBzdHJpcGVfYXBpX3NlYXJjaGAsIGBzdHJpcGVfYXBpX2RldGFpbHNgLCBhbmQgYHN0cmlwZV9hcGlfcmVhZGDigJR0byBmaW5kIHRoZSBuYXJyb3dlc3QgcmVhZCBlbmRwb2ludC4gRG8gbm90IGNhbGwgYW4gaW52ZW50ZWQgZW5kcG9pbnQgb3IgYSBnZW5lcmFsIHdyaXRlIHRvb2wuCgpCZWZvcmUgY2FsY3VsYXRpbmc6CgotIHNldCBvbmUgYGFzIG9mYCB0aW1lc3RhbXAgYW5kIG9uZSB0aW1lem9uZTsKLSBzdGF0ZSBjb21wYW55L2FjY291bnQgaWRlbnRpdHksIGVudmlyb25tZW50LCBjdXJyZW5jeSB0cmVhdG1lbnQsIGFuZCBhY2NvdW50aW5nIG1ldGhvZDsKLSBwYWdpbmF0ZSBvciBuYXJyb3cgYW55IHRydW5jYXRlZCByZXN1bHQ7Ci0ga2VlcCBjdXJyZW5jaWVzIHNlcGFyYXRlIHVubGVzcyBhbiBhdXRob3JpemVkIGNvbnZlcnNpb24gc291cmNlIGFuZCByYXRlIGRhdGUgYXJlIHN1cHBsaWVkOwotIHRyZWF0IG1pc3NpbmcgdmFsdWVzIGFzIG1pc3NpbmcsIG5vdCB6ZXJvOwotIGRpc3Rpbmd1aXNoIHRyYW5zYWN0aW9uIGRhdGUsIGR1ZSBkYXRlLCBzZXR0bGVtZW50L2F2YWlsYWJpbGl0eSBkYXRlLCBwYXlvdXQgZGF0ZSwgYW5kIGJvb2trZWVwaW5nIGRhdGUuCgpSZWFkIGByZWZlcmVuY2VzL3dvcmtmbG93cy5tZGAgZm9yIHRoZSBleGFjdCBldmlkZW5jZSwgY2FsY3VsYXRpb25zLCBvdXRwdXQgY29udHJhY3RzLCBhbmQgZ29sZGVuLXByb21wdCBhY2NlcHRhbmNlIGNyaXRlcmlhLgoKIyMgMy4gT3V0c3RhbmRpbmcgaW52b2ljZXMgYW5kIGFnaW5nCgpGb3IgIldoYXQncyBvdXRzdGFuZGluZyB0aGlzIG1vbnRoPyIgb3Igc2ltaWxhcjoKCjEuIENvbmZpcm0gd2hldGhlciAib3V0c3RhbmRpbmciIG1lYW5zIGFsbCBvcGVuIHJlY2VpdmFibGVzIGFzIG9mIHRoZSByZXBvcnQgZGF0ZSBvciBpbnZvaWNlcyBkdWUgd2l0aGluIHRoZSBuYW1lZCBtb250aC4gSWYgdW5zdGF0ZWQsIHJlcG9ydCBhbGwgb3BlbiBpbnZvaWNlcyBhcyBvZiB0b2RheSBhbmQgc2VwYXJhdGVseSBmbGFnIHRob3NlIGR1ZSB0aGlzIG1vbnRoLgoyLiBSZWNvbmNpbGUgdGhlIFF1aWNrQm9va3MgYWdlZC1yZWNlaXZhYmxlcyByZXBvcnQgd2l0aCBib3VuZGVkIG9wZW4taW52b2ljZSwgcGF5bWVudCwgY3JlZGl0LW1lbW8sIGFuZCBjdXN0b21lciByZWFkcy4gRG8gbm90IHVzZSB0aGUgb3JpZ2luYWwgaW52b2ljZSB0b3RhbCB3aGVuIGEgY3VycmVudCBvcGVuIGJhbGFuY2UgaXMgYXZhaWxhYmxlLgozLiBGZWVkIG5vcm1hbGl6ZWQgb3BlbiBiYWxhbmNlcyB0byBgYnVpbGRfYWdpbmdfcmVwb3J0YCBmcm9tIHRoZSBidW5kbGVkIGBhZ2luZ19yZXBvcnRgIG1vZHVsZSB0aHJvdWdoIGBydW5fY29kZWAuIFVzZSB0aGUgaGVscGVyJ3MgZml4ZWQgYnVja2V0czogQ3VycmVudCwgMeKAkzMwLCAzMeKAkzYwLCA2MeKAkzkwLCA5MSssIGFuZCBEdWUgZGF0ZSB1bmtub3duLgo0LiBSZXR1cm4gdG90YWxzIGJ5IGN1cnJlbmN5LCBvdmVyZHVlIHRvdGFscywgdGhlIGhpZ2hlc3QtaW1wYWN0IGludm9pY2VzLCBwYXltZW50cy9jcmVkaXRzIHRoYXQgbmVlZCByZXZpZXcsIGFuZCBleHBsaWNpdCBkYXRhIGdhcHMuIE5ldmVyIGNvbWJpbmUgY3VycmVuY2llcyBpbnRvIG9uZSBudW1iZXIuCjUuIElmIHRoZSB1c2VyIGFza3MgdG8gY2hhc2UgaW52b2ljZXMsIHByZXBhcmUgdGhlIGFnaW5nIHJlcG9ydCBmaXJzdCwgdGhlbiBmb2xsb3cgdGhlIEdtYWlsIGRyYWZ0IHdvcmtmbG93IGJlbG93LgoKIyMgNC4gRXhwZW5zZSBjYXRlZ29yaXphdGlvbiByZXZpZXcKCkZvciAiQ2F0ZWdvcml6ZSBsYXN0IHdlZWsncyB1bmNhdGVnb3JpemVkIGV4cGVuc2VzIiBvciBzaW1pbGFyOgoKMS4gUmVzb2x2ZSB0aGUgZXhhY3QgY2FsZW5kYXIgd2luZG93IGluIHRoZSBRdWlja0Jvb2tzIGNvbXBhbnkgdGltZXpvbmUgYW5kIGlkZW50aWZ5IHRoZSBhY3R1YWwgdW5jYXRlZ29yaXplZC9zdXNwZW5zZSBhY2NvdW50cyB1c2VkIGJ5IHRoYXQgY29tcGFueS4KMi4gRmV0Y2ggb25seSB1bmNhdGVnb3JpemVkIHB1cmNoYXNlcywgZXhwZW5zZXMsIGJpbGxzLCBhbmQgcmVsZXZhbnQgc3BsaXQgbGluZXMgaW4gc2NvcGUuIEluc3BlY3QgdGhlIGNoYXJ0IG9mIGFjY291bnRzIGFuZCBhIGJvdW5kZWQgaGlzdG9yeSBvZiB0aGUgc2FtZSB2ZW5kb3IvcGF5ZWUgYW5kIG1lbW8gcGF0dGVybnMuCjMuIFByb3Bvc2UgYW4gYWNjb3VudC9jYXRlZ29yeSwgY29uZmlkZW5jZSwgYW5kIGV2aWRlbmNlIGZvciBlYWNoIGxpbmUuIFVzZSBoaWdoIGNvbmZpZGVuY2Ugb25seSBmb3IgYSBzdGFibGUgZXhhY3QgcHJlY2VkZW50OyBzaG93IG1lZGl1bS9sb3cgY29uZmlkZW5jZSBhbmQgYWx0ZXJuYXRpdmVzIHdoZW4gZXZpZGVuY2UgY29uZmxpY3RzLgo0LiBGbGFnIHJhdGhlciB0aGFuIGd1ZXNzIHBlcnNvbmFsIGV4cGVuc2VzLCBmaXhlZCBhc3NldHMsIGxvYW4gcHJpbmNpcGFsL2ludGVyZXN0LCBvd25lciBkaXN0cmlidXRpb25zLCBzYWxlcyB0YXgvVkFULCByZWltYnVyc2FibGVzLCBwYXlyb2xsLCBpbnRlcmNvbXBhbnkgaXRlbXMsIGFuZCBhbWJpZ3VvdXMgc3BsaXRzLgo1LiBSZXR1cm4gYSByZXZpZXcgdGFibGUgd2l0aCBvcmlnaW5hbCBhY2NvdW50LCBwcm9wb3NlZCBhY2NvdW50LCBhbW91bnQvY3VycmVuY3ksIGV2aWRlbmNlLCBjb25maWRlbmNlLCBhbmQgdGF4L3NwbGl0IHF1ZXN0aW9ucy4gVGhpcyBwcm9tcHQgYXV0aG9yaXplcyByZWNvbW1lbmRhdGlvbnMsIG5vdCBib29ra2VlcGluZyBjaGFuZ2VzLgo2LiBBcHBseSBjaGFuZ2VzIG9ubHkgYWZ0ZXIgdGhlIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0cyBhcHBsaWNhdGlvbiwgdGhlIG9mZmljaWFsIFF1aWNrQm9va3Mgc2VydmVyIGhhcyB0aGUgbmVjZXNzYXJ5IHVwZGF0ZSB0b29sIGVuYWJsZWQsIGFuZCB5b3UgcHJldmlldyB0aGUgZXhhY3QgcmVjb3JkL2xpbmUvYWNjb3VudCBjaGFuZ2VzIGZvciBhcHByb3ZhbCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIG11dGF0aW9uLiBWZXJpZnkgZWFjaCByZXR1cm5lZCByZWNvcmQgYWZ0ZXJ3YXJkLgoKTmV2ZXIgaW52ZW50IGFuIGFjY291bnQsIHRheCB0cmVhdG1lbnQsIG9yIGRlZHVjdGlibGUtYnVzaW5lc3MtcHVycG9zZSBjbGFpbS4gUmVjb21tZW5kIGFjY291bnRhbnQgcmV2aWV3IHdoZW4gcG9saWN5IG9yIGp1cmlzZGljdGlvbiBkZXRlcm1pbmVzIHRoZSBhbnN3ZXIuCgojIyA1LiBNb250aGx5IGZpbmFuY2lhbCBzdW1tYXJ5IGFuZCBkZWNrCgpGb3IgIk1vbnRobHkgZmluYW5jaWFsIHN1bW1hcnkgYXMgYSBkZWNrIiBvciBzaW1pbGFyOgoKMS4gQ29uZmlybSB0aGUgbW9udGgsIGNhc2gvYWNjcnVhbCBiYXNpcywgY3VycmVuY3ksIGFuZCBjb21wYXJpc29uLiBJZiB1bnN0YXRlZCwgdXNlIHRoZSBtb3N0IHJlY2VudGx5IGNvbXBsZXRlZCBjYWxlbmRhciBtb250aCBhbmQgY29tcGFyZSBpdCB3aXRoIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgbW9udGggb24gdGhlIHNhbWUgYmFzaXMuCjIuIFJldHJpZXZlIFF1aWNrQm9va3MgUCZMIGRhdGEgcGx1cyB0aGUgc21hbGxlc3Qgc3VwcG9ydGluZyBkZXRhaWwgbmVlZGVkIHRvIGV4cGxhaW4gbWF0ZXJpYWwgY2hhbmdlcy4gU3RyaXBlIGRhdGEgY2FuIGNvcnJvYm9yYXRlIHByb2Nlc3NvciBhY3Rpdml0eSwgYnV0IGl0IG11c3Qgbm90IHJlcGxhY2UgdGhlIFF1aWNrQm9va3MgUCZMIG9yIGJlIGxhYmVsZWQgYXMgcmV2ZW51ZS4KMy4gTm9ybWFsaXplIG9ubHkgbGVhZiBhY2NvdW50IHJvd3MsIGVhY2ggY2FycnlpbmcgdGhlIHBvc2l0aXZlIG1hZ25pdHVkZSBRdWlja0Jvb2tzIHJlcG9ydHMsIHRoZW4gY2FsbCBgYnVpbGRfcG5sX3N1bW1hcnlgIGZyb20gdGhlIGJ1bmRsZWQgYHBubF9zdW1tYXJ5YCBtb2R1bGUgdGhyb3VnaCBgcnVuX2NvZGVgLiBUaGUgaGVscGVyIGRldGVybWluaXN0aWNhbGx5IGNhbGN1bGF0ZXMgY2F0ZWdvcnkgdG90YWxzLCBncm9zcyBwcm9maXQsIG9wZXJhdGluZyBpbmNvbWUsIG5ldCBpbmNvbWUsIHZhcmlhbmNlcywgYW5kIHBlcmNlbnRhZ2UgY2hhbmdlcy4KNC4gTG9hZCBgeGxzeC1yZXBvcnRgIGFuZCBjcmVhdGUgdGhlIGF1ZGl0YWJsZSB3b3JrYm9vayBmaXJzdDogc291cmNlIGNvbnRleHQsIGFzc3VtcHRpb25zLCBQJkwgY29tcGFyaXNvbiwgbWF0ZXJpYWwgZHJpdmVycywgcmVjb25jaWxpYXRpb24gZXhjZXB0aW9ucywgYW5kIGRhdGEgZ2Fwcy4KNS4gTG9hZCBgcHB0eC1kZWNrYCBhbmQgYnVpbGQgYSBjb25jaXNlIGRlY2sgZnJvbSB0aGUgdmVyaWZpZWQgd29ya2Jvb2s6IGhlYWRsaW5lLCByZXZlbnVlL2dyb3NzLXByb2ZpdCBwaWN0dXJlLCBvcGVyYXRpbmcgZXhwZW5zZXMsIG5ldC1pbmNvbWUgYnJpZGdlLCBjYXNoL3Byb2Nlc3NvciBvYnNlcnZhdGlvbnMsIGV4Y2VwdGlvbnMsIGFuZCBuZXh0IGFjdGlvbnMuCjYuIENsZWFybHkgbGFiZWwgY2FzaCB2ZXJzdXMgYWNjcnVhbCwgcGFydGlhbCBwZXJpb2RzLCBvbmUtb2ZmIGl0ZW1zLCBub24tY29tcGFyYWJsZSBjYXRlZ29yaWVzLCBtaXNzaW5nIHByaW9yLXBlcmlvZCBkYXRhLCBhbmQgYW55IG1hbmFnZW1lbnQgaW5mZXJlbmNlLiBQcmVzZXJ2ZSBzb3VyY2UgdGltZXN0YW1wcyBhbmQgdGhlIHdvcmtib29rIHBhdGggaW4gdGhlIGRlY2sgbm90ZXMgb3IgYXBwZW5kaXguCgpEbyBub3QgZGVzY3JpYmUgU3RyaXBlIGdyb3NzIHBheW1lbnQgdm9sdW1lIGFzIEdBQVAvSUZSUyByZXZlbnVlLCB0cmVhdCBwYXlvdXRzIGFzIHNhbGVzLCBvciBpbmZlciBjYXNoIGZsb3cgZnJvbSBhIFAmTC4KCiMjIDYuIFN0cmlwZSBkaXNwdXRlcywgcmVmdW5kcywgYW5kIHJlY29uY2lsaWF0aW9uCgpGb3IgIkFueSBTdHJpcGUgZGlzcHV0ZXMgdG8gcmVjb25jaWxlPyIgb3Igc2ltaWxhcjoKCjEuIFJlYWQgb3Blbiwgd29uLCBsb3N0LCBhbmQgcmVjZW50bHkgY2xvc2VkIGRpc3B1dGVzIGZvciB0aGUgcmVxdWVzdGVkIHBlcmlvZCwgYWxvbmcgd2l0aCB0aGVpciBjaGFyZ2UsIHJlZnVuZCwgYmFsYW5jZS10cmFuc2FjdGlvbiwgZmVlLCBhbmQgcGF5b3V0IGV2aWRlbmNlIHdoZW4gYXZhaWxhYmxlLgoyLiBJbiBRdWlja0Jvb2tzLCBsb29rIGZvciBleHBsaWNpdCBTdHJpcGUgSURzIG9yIGRvY3VtZW50ZWQgcHJvY2Vzc29yIHJlZmVyZW5jZXMgZmlyc3QuIENvbXBhcmUgdGhlIGFwcHJvcHJpYXRlIHBheW1lbnQsIHJlZnVuZCByZWNlaXB0L2NyZWRpdCBtZW1vLCBkZXBvc2l0LCBhbmQgZmVlIHJlY29yZHPigJRub3QgbWVyZWx5IHNhbWUtZGF5IGFtb3VudHMuCjMuIENsYXNzaWZ5IGV2ZXJ5IGl0ZW0gYXMgdmVyaWZpZWQgbWF0Y2gsIHRpbWluZyBkaWZmZXJlbmNlLCBhbW91bnQvY3VycmVuY3kgbWlzbWF0Y2gsIG1pc3NpbmcgUXVpY2tCb29rcyBlbnRyeSwgYW1iaWd1b3VzIGNhbmRpZGF0ZSwgb3IgbmVlZHMgaW52ZXN0aWdhdGlvbi4gRXhhY3QgYW1vdW50L2RhdGUgc2ltaWxhcml0eSBhbG9uZSBpcyBvbmx5IGEgY2FuZGlkYXRlLCBuZXZlciBwcm9vZi4KNC4gU2hvdyBkaXNwdXRlIHN0YXR1cywgYW1vdW50L2N1cnJlbmN5LCBpbXBvcnRhbnQgZGF0ZXMsIFN0cmlwZSByZWZlcmVuY2UsIFF1aWNrQm9va3MgZXZpZGVuY2UsIGFjY291bnRpbmcgaW1wYWN0IHRvIHJldmlldywgYW5kIHRoZSBuZXh0IG93bmVyL2FjdGlvbi4KNS4gS2VlcCBwcm9jZXNzb3IgZmVlcywgcmVmdW5kcywgZGlzcHV0ZXMsIGFuZCBuZXQgcGF5b3V0cyBzZXBhcmF0ZS4gQWNjb3VudCBmb3IgbXVsdGktY3VycmVuY3kgc2V0dGxlbWVudCBhbmQgcGF5b3V0IGJhdGNoaW5nIGJlZm9yZSBkZWNsYXJpbmcgYSBtaXNtYXRjaC4KNi4gRG8gbm90IGNyZWF0ZSByZWZ1bmRzLCBhY2NlcHQgZGlzcHV0ZXMsIHVwbG9hZCBldmlkZW5jZSwgb3IgcG9zdCBqb3VybmFsIGVudHJpZXMgZnJvbSB0aGlzIHdvcmtmbG93LgoKIyMgNy4gR21haWwgaW52b2ljZS1jaGFzZSBkcmFmdHMKClVzZSB0aGUgZGlyZWN0IEdtYWlsIGludGVncmF0aW9uLCBub3QgYSBHb29nbGUgTUNQIHNlcnZlci4KCjEuIFN0YXJ0IGZyb20gdmVyaWZpZWQgb3ZlcmR1ZSBiYWxhbmNlcyBhbmQgYW4gdW5hbWJpZ3VvdXMgYmlsbGluZyBjb250YWN0LiBTa2lwIG1pc3Npbmcgb3IgYW1iaWd1b3VzIHJlY2lwaWVudHMuCjIuIEdyb3VuZCBlYWNoIGRyYWZ0IGluIHRoZSBpbnZvaWNlIG51bWJlciwgY3VycmVudCBvcGVuIGJhbGFuY2UvY3VycmVuY3ksIGR1ZSBkYXRlLCBhbmQgdmVyaWZpZWQgcGF5bWVudCBzdGF0dXMuIE5ldmVyIGludmVudCBhIHByb21pc2UsIGxhdGUgZmVlLCB0aHJlYXQsIGJhbmsgZGV0YWlsLCBvciBwcmlvciBjb252ZXJzYXRpb24uCjMuIERlZHVwbGljYXRlIHJlY2lwaWVudHMgYW5kIGtlZXAgb25lIGNsZWFyIGNhbGwgdG8gYWN0aW9uLiBFeGNsdWRlIGludGVybmFsIG5vdGVzIGFuZCB1bnJlbGF0ZWQgYWNjb3VudCBoaXN0b3J5Lgo0LiBQcmV2aWV3IHJlY2lwaWVudCwgc3ViamVjdCwgYW5kIGJvZHksIHRoZW4gb2J0YWluIGV4cGxpY2l0IGFwcHJvdmFsIGJlZm9yZSBjcmVhdGluZyBHbWFpbCBkcmFmdHMuCjUuIENyZWF0aW5nIGEgZHJhZnQgbmV2ZXIgYXV0aG9yaXplcyBzZW5kaW5nLiBOZXZlciBzZW5kIGZyb20gdGhpcyB3b3JrZmxvdy4gVmVyaWZ5IGVhY2ggY3JlYXRlZCBkcmFmdCBieSBpdHMgcmV0dXJuZWQgaWRlbnRpZmllcjsgaWYgR21haWwgaXMgdW5hdmFpbGFibGUsIHJldHVybiBsYWJlbGVkIGNvcHktcmVhZHkgdGV4dCB3aXRob3V0IGNsYWltaW5nIGNyZWF0aW9uLgoKIyMgOC4gQ29tcGxldGlvbiBjaGVja3MKCkJlZm9yZSByZXBvcnRpbmcgc3VjY2VzczoKCi0gZXZlcnkgZmlndXJlIG5hbWVzIGl0cyBzeXN0ZW0sIGNvbXBhbnkvYWNjb3VudCwgZW52aXJvbm1lbnQsIHBlcmlvZCwgYmFzaXMsIGN1cnJlbmN5IHBvbGljeSwgYW5kIGBhcyBvZmAgdGltZTsKLSBRdWlja0Jvb2tzIHJlbWFpbnMgdGhlIGxlZGdlci9yZXBvcnRpbmcgc291cmNlIG9mIHRydXRoIGFuZCBTdHJpcGUgcmVtYWlucyBzdXBwbGVtZW50YXJ5IHJlY29uY2lsaWF0aW9uIGV2aWRlbmNlOwotIGFnaW5nIHVzZXMgY3VycmVudCBvcGVuIGJhbGFuY2VzIGFuZCBkZXRlcm1pbmlzdGljIGJ1Y2tldHM7Ci0gY2F0ZWdvcnkgcmVjb21tZW5kYXRpb25zIHNob3cgZXZpZGVuY2UvY29uZmlkZW5jZSBhbmQgd2VyZSBub3QgYXBwbGllZCB3aXRob3V0IGFwcHJvdmFsOwotIHdvcmtib29rIGFuZCBkZWNrIGZpZ3VyZXMgcmVjb25jaWxlIHRvIHRoZSBzYW1lIG5vcm1hbGl6ZWQgUCZMIGlucHV0OwotIGRpc3B1dGUvcmVmdW5kIG1hdGNoZXMgcmVseSBvbiBpZGVudGlmaWVycyBvciBhcmUgbGFiZWxlZCBjYW5kaWRhdGVzOwotIEdtYWlsIGNvbnRlbnQgd2FzIHByZXZpZXdlZCwgYXBwcm92YWwtZ2F0ZWQsIGFuZCBuZXZlciBzZW50OwotIG5vIGNvbm5lY3Rpb24sIHJlY29yZCBtdXRhdGlvbiwgZHJhZnQsIGFydGlmYWN0LCBvciB2ZXJpZmljYXRpb24gaXMgY2xhaW1lZCB1bmxlc3MgaXQgYWN0dWFsbHkgc3VjY2VlZGVkLgo=","executable":false},{"filename":"references/workflows.md","mimeType":"text/markdown","data":"IyBGaW5hbmNpYWwgQWNjb3VudCBNYW5hZ2VyIHdvcmtmbG93IHJlZmVyZW5jZQoKVXNlIHRoaXMgcmVmZXJlbmNlIG9ubHkgYWZ0ZXIgc2VsZWN0aW5nIHRoZSBleGFjdCBRdWlja0Jvb2tzIGNvbXBhbnkgYW5kIFN0cmlwZSBhY2NvdW50L2Vudmlyb25tZW50LiBGaWVsZCBhbmQgdG9vbCBuYW1lcyBiZWxvdyBhcmUgZXhhbXBsZXMgZnJvbSB0aGUgb2ZmaWNpYWwgc2VydmVyczsgaW5zcGVjdCB0aGUgbGl2ZSBzY2hlbWFzIGJlZm9yZSBjYWxsaW5nIHRoZW0uCgojIyBTaGFyZWQgZXZpZGVuY2UgaGllcmFyY2h5CgoxLiBWZXJpZmllZCBjb21wYW55L2FjY291bnQgaWRlbnRpdHksIHByZWZlcmVuY2VzLCBjdXJyZW5jeSwgdGltZXpvbmUsIGFuZCByZXBvcnQgYmFzaXMuCjIuIFF1aWNrQm9va3MgcmVwb3J0cyBmb3IgbGVkZ2VyLWJhY2tlZCBiYWxhbmNlcyBhbmQgc3RhdGVtZW50cy4KMy4gQm91bmRlZCBRdWlja0Jvb2tzIGVudGl0eSByZWFkcyBmb3IgaW52b2ljZS0sIGV4cGVuc2UtLCBwYXltZW50LSwgYW5kIGFjY291bnQtbGV2ZWwgZXhwbGFuYXRpb24uCjQuIFN0cmlwZSByZWFkcyBmb3IgcHJvY2Vzc29yLXNpZGUgcGF5bWVudHMsIGJhbGFuY2UgdHJhbnNhY3Rpb25zLCBmZWVzLCByZWZ1bmRzLCBwYXlvdXRzLCBhbmQgZGlzcHV0ZXMuCjUuIERpcmVjdCBHbWFpbCBvbmx5IGZvciB1c2VyLWFwcHJvdmVkIGRyYWZ0IGNyZWF0aW9uLgo2LiBFeHBsaWNpdCBhbmFseXNpcyBvciByZWNvbW1lbmRhdGlvbiwgbGFiZWxlZCBzZXBhcmF0ZWx5IGZyb20gc291cmNlLXN5c3RlbSBmYWN0cy4KClF1aWNrQm9va3MgaXMgYXV0aG9yaXRhdGl2ZSBmb3Igd2hhdCBpcyBib29rZWQuIFN0cmlwZSBpcyBhdXRob3JpdGF0aXZlIGZvciB3aGF0IFN0cmlwZSBwcm9jZXNzZWQuIEEgZGlzY3JlcGFuY3kgaXMgYW4gZXhjZXB0aW9uIHRvIGludmVzdGlnYXRlLCBub3QgcHJvb2YgdGhhdCBlaXRoZXIgc3lzdGVtIGlzIHdyb25nLgoKIyMgT2ZmaWNpYWwgY29ubmVjdG9yIHNldHVwCgojIyMgUXVpY2tCb29rcyBPbmxpbmUKClVzZSBJbnR1aXQncyBvZmZpY2lhbCBsb2NhbCBzZXJ2ZXI6CgotIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2ludHVpdC9xdWlja2Jvb2tzLW9ubGluZS1tY3Atc2VydmVyCi0gVHJhbnNwb3J0OiBsb2NhbCBzdGRpbyBzdWJwcm9jZXNzCi0gUmVkZWVwIHNlcnZlciBpZDogYHF1aWNrYm9va3NgCi0gUnVudGltZTogdXNlci1wcm92aWRlZCBOb2RlLmpzCi0gQXV0aGVudGljYXRpb246IEludHVpdCBPQXV0aCAyLjAgYXBwIHBsdXMgY29tcGFueSBhdXRob3JpemF0aW9uCi0gQ29tbW9uIGNvbmZpZ3VyYXRpb246IGBRVUlDS0JPT0tTX0NMSUVOVF9JRGAsIGBRVUlDS0JPT0tTX0NMSUVOVF9TRUNSRVRgLCBgUVVJQ0tCT09LU19SRUZSRVNIX1RPS0VOYCwgYFFVSUNLQk9PS1NfUkVBTE1fSURgLCBhbmQgYFFVSUNLQk9PS1NfRU5WSVJPTk1FTlRgCi0gUmV2aWV3LW9ubHkgc2FmZXR5OiBgUVVJQ0tCT09LU19ESVNBQkxFX1dSSVRFPXRydWVgLCBgUVVJQ0tCT09LU19ESVNBQkxFX1VQREFURT10cnVlYCwgYW5kIGBRVUlDS0JPT0tTX0RJU0FCTEVfREVMRVRFPXRydWVgCgpUaGUgb2ZmaWNpYWwgc2VydmVyIGlzIG5vdCBhIGhvc3RlZCBVUkwuIFNhbmRib3ggYXV0aG9yaXphdGlvbiBjYW4gdXNlIGEgbG9jYWxob3N0IGNhbGxiYWNrOyBwcm9kdWN0aW9uIGF1dGhvcml6YXRpb24gbWF5IHJlcXVpcmUgYSBwdWJsaWMgSFRUUFMgY2FsbGJhY2suIEZvbGxvdyB0aGUgc2VydmVyJ3MgY3VycmVudCBhdXRoZW50aWNhdGlvbiBkb2N1bWVudGF0aW9uIGFuZCBrZWVwIGNsaWVudCBzZWNyZXRzIGFuZCByb3RhdGVkIHJlZnJlc2ggdG9rZW5zIG91dCBvZiBjaGF0LCBjb21taXR0ZWQgZmlsZXMsIGFuZCByZXBvcnQgYXJ0aWZhY3RzLgoKQmVmb3JlIHVzZSwgdmVyaWZ5IHRoYXQgdGhlIGNvbm5lY3RlZCBwcm9jZXNzIGlzIHRoZSBvZmZpY2lhbCBJbnR1aXQgaW1wbGVtZW50YXRpb24sIHRoZSBzZWxlY3RlZCByZWFsbSBpcyBjb3JyZWN0LCB0aGUgZW52aXJvbm1lbnQgaXMgc2FuZGJveCBvciBwcm9kdWN0aW9uIGFzIGludGVuZGVkLCBhbmQgd3JpdGUvdXBkYXRlL2RlbGV0ZSB0b29sIGdyb3VwcyBhcmUgYWJzZW50IGZvciByZXZpZXctb25seSB3b3JrLgoKIyMjIFN0cmlwZQoKVXNlIFN0cmlwZSdzIG9mZmljaWFsIGhvc3RlZCBzZXJ2ZXI6CgotIERvY3VtZW50YXRpb246IGh0dHBzOi8vZG9jcy5zdHJpcGUuY29tL21jcAotIEVuZHBvaW50OiBodHRwczovL21jcC5zdHJpcGUuY29tCi0gUmVkZWVwIHNlcnZlciBpZDogYHN0cmlwZWAKLSBBdXRoZW50aWNhdGlvbjogTUNQIE9BdXRoCi0gU2NvcGU6IHRoZSBhY2NvdW50L29yZ2FuaXphdGlvbiBhbmQgbGl2ZSBtb2RlIG9yIHNhbmRib3ggc2VsZWN0ZWQgZHVyaW5nIGF1dGhvcml6YXRpb24KClN0cmlwZSBkb2N1bWVudHMgZ2VuZXJhbCByZWFkIGFuZCB3cml0ZSB0b29scy4gVGhpcyBwYWNrIHVzZXMgcmVhZHMgb25seS4gSW5zcGVjdCB0aGUgbGl2ZSBzY2hlbWEgZm9yIHRoZSBleGFjdCBBUEkgcGF0aHMgYW5kIHBhcmFtZXRlcnMsIGFuZCBsZWF2ZSBodW1hbiBjb25maXJtYXRpb24gZW5hYmxlZC4KCiMjIEludm9pY2UtYWdpbmcgZXZpZGVuY2UgYW5kIGNhbGN1bGF0aW9uCgpTZXQgb25lIGBhc19vZmAgZGF0ZSBpbiB0aGUgUXVpY2tCb29rcyBjb21wYW55IHRpbWV6b25lLiBTdGFydCB3aXRoIHRoZSBhZ2VkLXJlY2VpdmFibGVzIGRldGFpbCByZXBvcnQgd2hlbiBhdmFpbGFibGUsIHRoZW4gcmVjb25jaWxlIGl0IHRvIG9wZW4gaW52b2ljZSBiYWxhbmNlcyBhbmQgYXBwbGllZCBwYXltZW50cy9jcmVkaXRzLgoKUmVxdWlyZWQgaW52b2ljZSBmaWVsZHM6CgotIHN0YWJsZSBRdWlja0Jvb2tzIGludm9pY2UgaWQgYW5kIGRpc3BsYXkvZG9jdW1lbnQgbnVtYmVyOwotIGN1c3RvbWVyIGlkIGFuZCBkaXNwbGF5IG5hbWU7Ci0gdHJhbnNhY3Rpb24gZGF0ZSBhbmQgZHVlIGRhdGU7Ci0gY3VycmVudCBvcGVuIGJhbGFuY2UsIG5vdCBqdXN0IG9yaWdpbmFsIHRvdGFsOwotIGN1cnJlbmN5OwotIHBheW1lbnQsIGNyZWRpdCwgb3Igc3RhdHVzIGV2aWRlbmNlIG5lZWRlZCB0byBleHBsYWluIHRoZSBiYWxhbmNlLgoKVXNlIHRoZXNlIGJ1Y2tldHM6Cgp8IEJ1Y2tldCB8IFJ1bGUgfAp8LS0tfC0tLXwKfCBDdXJyZW50IHwgZHVlIGRhdGUgaXMgb24gb3IgYWZ0ZXIgYGFzX29mYCB8CnwgMeKAkzMwIHwgMSB0aHJvdWdoIDMwIGNhbGVuZGFyIGRheXMgb3ZlcmR1ZSB8CnwgMzHigJM2MCB8IDMxIHRocm91Z2ggNjAgY2FsZW5kYXIgZGF5cyBvdmVyZHVlIHwKfCA2MeKAkzkwIHwgNjEgdGhyb3VnaCA5MCBjYWxlbmRhciBkYXlzIG92ZXJkdWUgfAp8IDkxKyB8IDkxIG9yIG1vcmUgY2FsZW5kYXIgZGF5cyBvdmVyZHVlIHwKfCBEdWUgZGF0ZSB1bmtub3duIHwgbm8gZGVmZW5zaWJsZSBkdWUgZGF0ZSB8CgpEbyBub3QgY291bnQgemVyby1iYWxhbmNlIGludm9pY2VzLiBLZWVwIGNyZWRpdHMvdW5hcHBsaWVkIGNhc2ggc2VwYXJhdGUgdW50aWwgdGhlaXIgaW52b2ljZSBhcHBsaWNhdGlvbiBpcyB2ZXJpZmllZC4gR3JvdXAgZXZlcnkgYW1vdW50IGJ5IGN1cnJlbmN5OyBuZXZlciBjcmVhdGUgYSBjcm9zcy1jdXJyZW5jeSBncmFuZCB0b3RhbCB3aXRob3V0IGFuIGF1dGhvcml6ZWQgY29udmVyc2lvbiBwb2xpY3kuCgojIyMgQWdpbmcgaGVscGVyIGNvbnRyYWN0CgpUaGUgYnVuZGxlZCBgYWdpbmdfcmVwb3J0YCBtb2R1bGUgaXMgb24gYHJ1bl9jb2RlYCdzIFB5dGhvbiBwYXRoLiBDYWxsIGBidWlsZF9hZ2luZ19yZXBvcnQocGF5bG9hZClgOyBkbyBub3QgcmVhZCBvciByZXdyaXRlIHRoZSBzY3JpcHQuCgpJbnB1dDoKCmBgYGpzb24KewogICJhc19vZiI6ICIyMDI2LTA4LTMxIiwKICAiY29tcGFueSI6ICJFeGFtcGxlIENvIiwKICAicmVhbG1faWQiOiAiMTIzNDU2Nzg5IiwKICAic291cmNlX3VwZGF0ZWRfYXQiOiAiMjAyNi0wOC0zMVQxNToyMDowMC0wNDowMCIsCiAgImludm9pY2VzIjogWwogICAgewogICAgICAiaWQiOiAiMTQ1IiwKICAgICAgImludm9pY2VfbnVtYmVyIjogIklOVi0xMDQ1IiwKICAgICAgImN1c3RvbWVyIjogIkFjbWUgQ29ycCIsCiAgICAgICJkdWVfZGF0ZSI6ICIyMDI2LTA3LTMxIiwKICAgICAgIm9wZW5fYW1vdW50IjogIjEyNTAuMDAiLAogICAgICAiY3VycmVuY3kiOiAiVVNEIgogICAgfQogIF0KfQpgYGAKCmBhc19vZmAgYW5kIGBpbnZvaWNlc2AgYXJlIHJlcXVpcmVkLiBFYWNoIGludm9pY2UgcmVxdWlyZXMgYGlkYCwgYGN1c3RvbWVyYCwgYG9wZW5fYW1vdW50YCwgYW5kIGBjdXJyZW5jeWA7IGBkdWVfZGF0ZWAgY2FuIGJlIG51bGwuIE1vbmV0YXJ5IHZhbHVlcyBtdXN0IGJlIGZpbml0ZSwgbm9uLW5lZ2F0aXZlLCBhbmQgb2YgYSBwbGF1c2libGUgbGVkZ2VyIG1hZ25pdHVkZS4gVGhlIGhlbHBlciByYWlzZXMgYEZpbmFuY2VJbnB1dEVycm9yYCBmb3IgZHVwbGljYXRlIGludm9pY2UgaWRzLCBpbnZhbGlkIGRhdGVzLCBtaXNzaW5nIGN1cnJlbmNpZXMsIGFuZCBtYWxmb3JtZWQgbW9uZXkg4oCUIHN1cmZhY2UgdGhhdCBtZXNzYWdlIGluc3RlYWQgb2Ygd29ya2luZyBhcm91bmQgaXQuCgpPdXRwdXQgY29udGFpbnMgc29ydGVkIHJvd3MsIHplcm8tYmFsYW5jZSBleGNsdXNpb25zLCBhbmQgdG90YWxzIGJ5IGN1cnJlbmN5IGZvciBlYWNoIGJ1Y2tldCwgdG90YWwgb3BlbiwgYW5kIHRvdGFsIG92ZXJkdWUuIE1vbmV5IHJlbWFpbnMgZGVjaW1hbCB0ZXh0IHNvIGRvd25zdHJlYW0gYXJ0aWZhY3QgY29kZSBkb2VzIG5vdCBpbmhlcml0IGJpbmFyeSBmbG9hdGluZy1wb2ludCBlcnJvci4KClVzZSB0aGUgb3V0cHV0IGFzIGEgY2FsY3VsYXRpb24gbGF5ZXIsIG5vdCBhcyBuZXcgc291cmNlIGV2aWRlbmNlLiBQcmVzZXJ2ZSB0aGUgUXVpY2tCb29rcyByZXBvcnQvcXVlcnkgaWRlbnRpZmllcnMgYW5kIHJldHJpZXZhbCB0aW1lIGJlc2lkZSBpdC4KCiMjIEludm9pY2UtY2hhc2Ugb3V0cHV0CgpQcmlvcml0aXplIG92ZXJkdWUgaW52b2ljZXMgYnkgYWdlIGFuZCBvcGVuIGJhbGFuY2Ugd2l0aGluIGVhY2ggY3VycmVuY3kuIEEgZHJhZnQgY2FuZGlkYXRlIG5lZWRzOgoKLSB2ZXJpZmllZCBjdXJyZW50IG9wZW4gYmFsYW5jZTsKLSBkdWUgZGF0ZTsKLSBpbnZvaWNlL2RvY3VtZW50IG51bWJlcjsKLSB1bmFtYmlndW91cyBjdXN0b21lciBiaWxsaW5nIGNvbnRhY3QgYW5kIGVtYWlsOwotIG5vIHZlcmlmaWVkIHBheW1lbnQsIGNyZWRpdCwgYWN0aXZlIGRpc3B1dGUsIG9yIGRvLW5vdC1jb250YWN0IG5vdGUgdGhhdCByZXNvbHZlcyBvciBwYXVzZXMgdGhlIGNoYXNlOwotIHNlbmRlciBpZGVudGl0eSBzdXBwbGllZCBieSB0aGUgdXNlciBvciBjb25uZWN0ZWQgR21haWwgYWNjb3VudC4KCkRyYWZ0IGZvcm1hdDoKCmBgYHRleHQKVG86IDx2ZXJpZmllZCBiaWxsaW5nIGNvbnRhY3Q+ClN1YmplY3Q6IDxuZXV0cmFsIGludm9pY2Utc3BlY2lmaWMgc3ViamVjdD4KCkhpIDxuYW1lPiwKCk91ciByZWNvcmRzIHNob3cgaW52b2ljZSA8bnVtYmVyPiBmb3IgPGFtb3VudCBjdXJyZW5jeT4sIGR1ZSA8ZGF0ZT4sIHdpdGggPG9wZW4gYmFsYW5jZSBjdXJyZW5jeT4gY3VycmVudGx5IG91dHN0YW5kaW5nLgpDb3VsZCB5b3UgY29uZmlybSBpdHMgcGF5bWVudCBzdGF0dXMgb3IgbGV0IHVzIGtub3cgaWYgeW91IG5lZWQgYW5vdGhlciBjb3B5PwoKQmVzdCwKPHZlcmlmaWVkIHNlbmRlcj4KYGBgCgpBZGFwdCB0b25lIHRvIHRoZSB1c2VyJ3MgZGlyZWN0aW9uLCBidXQgZG8gbm90IGFkZCB0aHJlYXRzLCBsYXRlIGZlZXMsIGNvbGxlY3Rpb24gY2xhaW1zLCB3aXJlIGluc3RydWN0aW9ucywgb3IgaW52ZW50ZWQgaGlzdG9yeS4gUHJldmlldyBhbGwgZHJhZnRzIGFuZCBvYnRhaW4gYXBwcm92YWwgaW1tZWRpYXRlbHkgYmVmb3JlIGNyZWF0aW5nIHRoZW0uIE5ldmVyIHNlbmQuCgojIyBFeHBlbnNlLWNhdGVnb3JpemF0aW9uIHJldmlldwoKU2V0IGFuIGluY2x1c2l2ZSBzdGFydC9lbmQgZGF0ZSBpbiB0aGUgUXVpY2tCb29rcyBjb21wYW55IHRpbWV6b25lLiBSZXNvbHZlIHdoaWNoIGFjY291bnRzIG9yIGZpZWxkcyBhY3R1YWxseSBtZWFuIHVuY2F0ZWdvcml6ZWQgZm9yIHRoYXQgY29tcGFueeKAlGNvbW1vbiBuYW1lcyBzdWNoIGFzIGBVbmNhdGVnb3JpemVkIEV4cGVuc2VgLCBgQXNrIE15IEFjY291bnRhbnRgLCBvciBhIHN1c3BlbnNlIGFjY291bnQgYXJlIG5vdCB1bml2ZXJzYWwuCgpGb3IgZWFjaCBjYW5kaWRhdGUsIHJldHJpZXZlOgoKLSB0cmFuc2FjdGlvbiBhbmQgbGluZSBpZDsKLSBkYXRlLCB0eXBlLCBwYXllZS92ZW5kb3IsIG1lbW8sIGFtb3VudC9jdXJyZW5jeSwgYW5kIGN1cnJlbnQgYWNjb3VudDsKLSBjbGFzcy9sb2NhdGlvbi9wcm9qZWN0IGFuZCB0YXggZmllbGRzIHdoZW4gcmVsZXZhbnQ7Ci0gY2hhcnQtb2YtYWNjb3VudHMgY2FuZGlkYXRlczsKLSBhIGJvdW5kZWQgc2V0IG9mIHByaW9yIGFwcHJvdmVkIHRyYW5zYWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5vcm1hbGl6ZWQgdmVuZG9yL3BheWVlIG9yIGEgc3Ryb25nIG1lbW8gcGF0dGVybi4KCkV2aWRlbmNlIGxldmVsczoKCi0gKipIaWdoOioqIHRoZSBzYW1lIHBheWVlIGFuZCB0cmFuc2FjdGlvbiBwYXR0ZXJuIGNvbnNpc3RlbnRseSB1c2VkIG9uZSBhY3RpdmUgYWNjb3VudCB3aXRoIG5vIGNvbmZsaWN0aW5nIHNwbGl0L3RheCB0cmVhdG1lbnQuCi0gKipNZWRpdW06KiogYSBzdHJvbmcgcGF0dGVybiBleGlzdHMgYnV0IGhpc3RvcnkgaXMgc3BhcnNlLCB3b3JkaW5nIGNoYW5nZWQsIG9yIG1vcmUgdGhhbiBvbmUgcGxhdXNpYmxlIGFjY291bnQgZXhpc3RzLgotICoqTG93OioqIG5vIGRlZmVuc2libGUgcHJlY2VkZW50LCBjb25mbGljdGluZyBoaXN0b3J5LCBvciBwb2xpY3kvanVyaXNkaWN0aW9uIGRldGVybWluZXMgdHJlYXRtZW50LgoKT3V0cHV0IGNvbHVtbnM6CgpgYGB0ZXh0CkRhdGUgfCBUcmFuc2FjdGlvbi9saW5lIHwgUGF5ZWUgfCBNZW1vIHwgQW1vdW50L2N1cnJlbmN5IHwgQ3VycmVudCBhY2NvdW50ClByb3Bvc2VkIGFjY291bnQgfCBDb25maWRlbmNlIHwgRXZpZGVuY2UgfCBTcGxpdC90YXggcXVlc3Rpb24gfCBBY3Rpb24KYGBgCgpBbHdheXMgZmxhZyBjYXBpdGFsIGFzc2V0cywgZGVidCBwYXltZW50cywgb3duZXIgZXF1aXR5L2Rpc3RyaWJ1dGlvbnMsIHBlcnNvbmFsIHNwZW5kLCByZWltYnVyc2FibGVzLCBwYXlyb2xsLCB0YXhlcywgaW50ZXJjb21wYW55IGFjdGl2aXR5LCBhbmQgYW1iaWd1b3VzIG11bHRpLWxpbmUgYWxsb2NhdGlvbnMuIFRoZSByZWNvbW1lbmRhdGlvbiB0YWJsZSBpcyBjb21wbGV0ZSBmb3IgdGhlIGdvbGRlbiBwcm9tcHQ7IG11dGF0aW9uIGlzIGEgc2VwYXJhdGUsIGV4cGxpY2l0LCBhcHByb3ZhbC1nYXRlZCBhY3Rpb24uCgojIyBNb250aGx5IFAmTCB3b3JrZmxvdwoKVXNlIG9uZSBhY2NvdW50aW5nIG1ldGhvZCBhbmQgY29uc2lzdGVudCBkYXRlIGJvdW5kYXJpZXMgZm9yIGN1cnJlbnQgYW5kIGNvbXBhcmlzb24gcGVyaW9kcy4gUHJlZmVyIGEgY29tcGxldGVkIG1vbnRoLiBJZiB0aGUgdXNlciBjaG9vc2VzIGEgcGFydGlhbCBtb250aCwgY29tcGFyZSBpdCB3aXRoIGFuIGVxdWl2YWxlbnRseSBlbGFwc2VkIHByaW9yIHBlcmlvZCBhbmQgbGFiZWwgaXQgcGFydGlhbC4KClJldHJpZXZlIHRoZSBRdWlja0Jvb2tzIFByb2ZpdCBhbmQgTG9zcyByZXBvcnQgZmlyc3QuIFByZXNlcnZlOgoKLSBjb21wYW55L3JlYWxtOwotIGNhc2ggb3IgYWNjcnVhbCBiYXNpczsKLSBzdGFydC9lbmQgZGF0ZXM7Ci0gaG9tZS9yZXBvcnQgY3VycmVuY3k7Ci0gcmVwb3J0IGdlbmVyYXRpb24gdGltZTsKLSBsZWFmIGFjY291bnQgcm93cyBhbmQgUXVpY2tCb29rcyB0b3RhbHM7Ci0gZXhjbHVzaW9ucyBhbmQgYW55IGNoYW5nZWQgYWNjb3VudCBtYXBwaW5nLgoKVXNlIHN1cHBvcnRpbmcgdHJhbnNhY3Rpb24gZGV0YWlsIG9ubHkgZm9yIG1hdGVyaWFsIGRyaXZlcnMuIEEgcmVhc29uYWJsZSBkZWZhdWx0IGZvciAibWF0ZXJpYWwiIGlzIHRoZSBsYXJnZXIgb2YgMTAlIG9mIHRoZSBhZmZlY3RlZCBsaW5lIG9yIGFuIGFic29sdXRlIHRocmVzaG9sZCB0aGUgdXNlciBwcm92aWRlczsgaWYgdGhlIHVzZXIgc3VwcGxpZXMgbm9uZSwgZGVzY3JpYmUgdGhlIGxhcmdlc3QgY29udHJpYnV0b3JzIHdpdGhvdXQgaW52ZW50aW5nIGEgcG9saWN5IHRocmVzaG9sZC4KCiMjIyBQJkwgaGVscGVyIGNvbnRyYWN0CgpUaGUgYnVuZGxlZCBgcG5sX3N1bW1hcnlgIG1vZHVsZSBpcyBvbiBgcnVuX2NvZGVgJ3MgUHl0aG9uIHBhdGguIENhbGwgYGJ1aWxkX3BubF9zdW1tYXJ5KHBheWxvYWQpYDsgZG8gbm90IHJlYWQgb3IgcmV3cml0ZSB0aGUgc2NyaXB0LgoKSW5wdXQgbXVzdCBjb250YWluIGxlYWYgYWNjb3VudCByb3dzIG9ubHk6CgpgYGBqc29uCnsKICAicGVyaW9kIjogeyJzdGFydCI6ICIyMDI2LTA3LTAxIiwgImVuZCI6ICIyMDI2LTA3LTMxIn0sCiAgImNvbXBhcmlzb25fcGVyaW9kIjogeyJzdGFydCI6ICIyMDI2LTA2LTAxIiwgImVuZCI6ICIyMDI2LTA2LTMwIn0sCiAgImNvbXBhbnkiOiAiRXhhbXBsZSBDbyIsCiAgInJlYWxtX2lkIjogIjEyMzQ1Njc4OSIsCiAgImN1cnJlbmN5IjogIlVTRCIsCiAgImFjY291bnRpbmdfbWV0aG9kIjogImFjY3J1YWwiLAogICJzb3VyY2VfdXBkYXRlZF9hdCI6ICIyMDI2LTA4LTAxVDA5OjAwOjAwLTA0OjAwIiwKICAicm93cyI6IFsKICAgIHsKICAgICAgImFjY291bnQiOiAiUHJvZHVjdCBzYWxlcyIsCiAgICAgICJjYXRlZ29yeSI6ICJpbmNvbWUiLAogICAgICAiY3VycmVudCI6ICI4MDAwMC4wMCIsCiAgICAgICJjb21wYXJpc29uIjogIjcyMDAwLjAwIgogICAgfQogIF0KfQpgYGAKCkFsbG93ZWQgY2F0ZWdvcmllcyBhcmUgYGluY29tZWAsIGBjb3N0X29mX2dvb2RzX3NvbGRgLCBgZXhwZW5zZWAsIGBvdGhlcl9pbmNvbWVgLCBhbmQgYG90aGVyX2V4cGVuc2VgLiBEbyBub3QgcGFzcyBwYXJlbnQgc3VidG90YWwgcm93cywgb3IgdG90YWxzIHdpbGwgZG91YmxlLWNvdW50LiBNb25ldGFyeSB2YWx1ZXMgbXVzdCBiZSBmaW5pdGUgZGVjaW1hbCB2YWx1ZXMuCgpQYXNzIGV2ZXJ5IGNhdGVnb3J5IGFzIHRoZSBwb3NpdGl2ZSBtYWduaXR1ZGUgUXVpY2tCb29rcyByZXBvcnRzLCBpbmNsdWRpbmcgdGhlIGV4cGVuc2UgY2F0ZWdvcmllczsgdGhlIGhlbHBlciBkb2VzIHRoZSBzdWJ0cmFjdGlvbi4gVXNlIGEgbmVnYXRpdmUgYW1vdW50IG9ubHkgZm9yIGEgZ2VudWluZSBjb250cmEgbGluZSBpbnNpZGUgaXRzIGNhdGVnb3J5LCBzdWNoIGFzIGEgcmVmdW5kIG9yIGRpc2NvdW50LiBOb3JtYWxpemluZyB3aG9sZSBleHBlbnNlIGNhdGVnb3JpZXMgYXMgbmVnYXRpdmVzIGlzIGFjY2VwdGVkIHNpbGVudGx5IGFuZCBpbmZsYXRlcyBuZXQgaW5jb21lLCBzbyBjaGVjayB0aGUgc2lnbiBvZiBhIHNhbXBsZWQgZXhwZW5zZSByb3cgYmVmb3JlIGNhbGxpbmcgdGhlIGhlbHBlci4gSXQgcmFpc2VzIGBGaW5hbmNlSW5wdXRFcnJvcmAgZm9yIGFuIHVua25vd24gY2F0ZWdvcnksIGEgYmFkIHBlcmlvZCwgb3IgbWFsZm9ybWVkIG1vbmV5LgoKVGhlIGhlbHBlciBjYWxjdWxhdGVzIGVhY2ggcm93J3MgYW1vdW50IHZhcmlhbmNlIGFuZCBwZXJjZW50IGNoYW5nZSwgY2F0ZWdvcnkgdG90YWxzLCBncm9zcyBwcm9maXQsIG9wZXJhdGluZyBpbmNvbWUsIGFuZCBuZXQgaW5jb21lIGZvciBib3RoIHBlcmlvZHMsIHBsdXMgdG90YWwgdmFyaWFuY2VzLiBBIHBlcmNlbnRhZ2UgaXMgbnVsbCB3aGVuIHRoZSBjb21wYXJpc29uIGlzIHplcm8uIFBlcmNlbnQgY2hhbmdlcyBhcmUgY2FsY3VsYXRpb24gYWlkcywgbm90IGV4cGxhbmF0aW9ucy4KClJlY29uY2lsZSB0aGUgaGVscGVyJ3MgY3VycmVudC1wZXJpb2QgbmV0IGluY29tZSBhbmQgY2F0ZWdvcnkgdG90YWxzIHRvIHRoZSBzb3VyY2UgUXVpY2tCb29rcyByZXBvcnQgYmVmb3JlIHByb2R1Y2luZyBhcnRpZmFjdHMuIElmIHRoZXkgZGlmZmVyLCBzdG9wIGFuZCBjb3JyZWN0IGxlYWYtcm93IG5vcm1hbGl6YXRpb24uCgojIyMgV29ya2Jvb2sgY29udHJhY3QKCkxvYWQgYHhsc3gtcmVwb3J0YCBhbmQgY3JlYXRlIGFuIGF1ZGl0YWJsZSB3b3JrYm9vayB3aXRoOgoKMS4gKipSZWFkIG1lKiog4oCUIGNvbXBhbnksIHBlcmlvZCwgYmFzaXMsIGN1cnJlbmN5LCBhcy1vZi9zb3VyY2UgdGltZXN0YW1wcywgZGVmaW5pdGlvbnMsIGFuZCBjYXZlYXRzLgoyLiAqKlAmTCBjb21wYXJpc29uKiog4oCUIGFjY291bnRzLCBjdXJyZW50LCBjb21wYXJpc29uLCBhbW91bnQgdmFyaWFuY2UsIHBlcmNlbnRhZ2UgdmFyaWFuY2UsIGFuZCBjYXRlZ29yeSB0b3RhbHMuCjMuICoqRHJpdmVycyoqIOKAlCBzb3VyY2UtYmFja2VkIG1hdGVyaWFsIGNoYW5nZXMgd2l0aCBib3VuZGVkIHRyYW5zYWN0aW9uIGV2aWRlbmNlLgo0LiAqKkEvUiBhZ2luZyoqIOKAlCBhZ2luZyBoZWxwZXIgb3V0cHV0IHdoZW4gcmVxdWVzdGVkLgo1LiAqKlN0cmlwZSByZWNvbmNpbGlhdGlvbioqIOKAlCBleGNlcHRpb25zIG9ubHksIHdpdGggYm90aCBzeXN0ZW1zJyBpZGVudGlmaWVycy4KNi4gKipEYXRhIGdhcHMqKiDigJQgbWlzc2luZyBmaWVsZHMsIHBhcnRpYWwgcmVhZHMsIHVubWF0Y2hlZCByZWNvcmRzLCBhbmQgcXVlc3Rpb25zIGZvciB0aGUgYm9va2tlZXBlci9hY2NvdW50YW50LgoKRG8gbm90IGVtYmVkIGFjY2VzcyB0b2tlbnMsIGZ1bGwgY3VzdG9tZXIgZW1haWwgbGlzdHMsIG9yIHVucmVxdWVzdGVkIHJhdyBleHBvcnRzLgoKIyMjIERlY2sgY29udHJhY3QKCkxvYWQgYHBwdHgtZGVja2AgYW5kIGJ1aWxkIGZyb20gdGhlIHZlcmlmaWVkIHdvcmtib29rOgoKMS4gVGl0bGUgYW5kIHJlcG9ydGluZyBjb250ZXh0LgoyLiBGaW5hbmNpYWwgaGVhZGxpbmUgd2l0aCBiYXNpcy9jdXJyZW5jeSBhbmQgdGhlIHRocmVlIG1vc3QgZGVjaXNpb24tcmVsZXZhbnQgY2hhbmdlcy4KMy4gUmV2ZW51ZSBhbmQgZ3Jvc3MtcHJvZml0IGNvbXBhcmlzb24uCjQuIE9wZXJhdGluZy1leHBlbnNlIGRyaXZlcnMuCjUuIE5ldC1pbmNvbWUgYnJpZGdlIG9yIHdhdGVyZmFsbCB3aGVuIHN1cHBvcnRlZCBieSB0aGUgZGF0YS4KNi4gUmVjZWl2YWJsZXMsIHByb2Nlc3NvciwgZGlzcHV0ZS9yZWZ1bmQsIG9yIGNhc2ggb2JzZXJ2YXRpb25z4oCUY2xlYXJseSBzZXBhcmF0ZWQuCjcuIFJlY29uY2lsaWF0aW9uIGV4Y2VwdGlvbnMgYW5kIGFjY291bnRpbmcgcXVlc3Rpb25zLgo4LiBBY3Rpb25zLCBvd25lcnMsIGFuZCBhcHBlbmRpeC9zb3VyY2Ugbm90ZXMuCgpFdmVyeSBjaGFydCBtdXN0IG5hbWUgaXRzIHBlcmlvZCBhbmQgdW5pdHMuIERvIG5vdCBwcmVzZW50IGEgY2F1c2FsIGV4cGxhbmF0aW9uIHVubGVzcyBzb3VyY2UgZXZpZGVuY2Ugc3VwcG9ydHMgaXQuCgojIyBTdHJpcGUgcmVjb25jaWxpYXRpb24gd29ya2Zsb3cKClN0YXJ0IHdpdGggU3RyaXBlIGFjY291bnQgaWRlbnRpdHkgYW5kIG1vZGUuIEZvciBkaXNwdXRlcywgcmV0cmlldmUgdGhlIHNtYWxsZXN0IHNldCB0aGF0IHN1cHBvcnRzOgoKLSBkaXNwdXRlIGlkLCBzdGF0dXMsIGFtb3VudC9jdXJyZW5jeSwgcmVhc29uLCBldmlkZW5jZSBkdWUgZGF0ZSwgY3JlYXRlZC9jbG9zZWQgZGF0ZXM7Ci0gY2hhcmdlL3BheW1lbnQtaW50ZW50IGFuZCBjdXN0b21lciByZWZlcmVuY2VzOwotIHJlbGF0ZWQgcmVmdW5kcywgYmFsYW5jZSB0cmFuc2FjdGlvbnMsIGZlZXMsIGF2YWlsYWJpbGl0eSBkYXRlcywgYW5kIHBheW91dHM7Ci0gbWV0YWRhdGEgdGhhdCBpbnRlbnRpb25hbGx5IGNhcnJpZXMgYSBRdWlja0Jvb2tzIGlkLgoKVGhlbiBpbnNwZWN0IFF1aWNrQm9va3MgZm9yIGV4cGxpY2l0IFN0cmlwZSByZWZlcmVuY2VzIGluIHBheW1lbnRzLCByZWZ1bmQgcmVjZWlwdHMsIGNyZWRpdCBtZW1vcywgZGVwb3NpdHMsIGV4cGVuc2VzL2ZlZXMsIG9yIGRvY3VtZW50ZWQgY2xlYXJpbmctYWNjb3VudCBlbnRyaWVzLgoKRXZpZGVuY2UgY2xhc3NlczoKCnwgQ2xhc3NpZmljYXRpb24gfCBFdmlkZW5jZSB8CnwtLS18LS0tfAp8IFZlcmlmaWVkIG1hdGNoIHwgU3RhYmxlIFN0cmlwZSBpZCBvciBkb2N1bWVudGVkIG9uZS10by1vbmUgcmVmZXJlbmNlIHBsdXMgY29uc2lzdGVudCBhbW91bnQvY3VycmVuY3kgfAp8IFRpbWluZyBkaWZmZXJlbmNlIHwgVmVyaWZpZWQgbWF0Y2ggd2hvc2UgcHJvY2Vzc29yIGFuZCBib29ra2VlcGluZyBkYXRlcyBmYWxsIGluIGRpZmZlcmVudCBwZXJpb2RzIHwKfCBBbW91bnQvY3VycmVuY3kgbWlzbWF0Y2ggfCBWZXJpZmllZCByZWZlcmVuY2UgYnV0IGluY29uc2lzdGVudCBleHBlY3RlZCBhbW91bnQgb3IgY3VycmVuY3kgfAp8IE1pc3NpbmcgUXVpY2tCb29rcyBlbnRyeSB8IFN0cmlwZSBldmVudCBmb3VuZDsgbm8gY29ycmVzcG9uZGluZyBib29rZWQgcmVjb3JkIGFmdGVyIGEgYm91bmRlZCwgZG9jdW1lbnRlZCBzZWFyY2ggfAp8IEFtYmlndW91cyBjYW5kaWRhdGUgfCBTaW1pbGFyIGFtb3VudC9kYXRlL2N1c3RvbWVyIGJ1dCBubyBzdGFibGUgaWRlbnRpZmllciB8CnwgTmVlZHMgaW52ZXN0aWdhdGlvbiB8IE1pc3NpbmcsIGNvbnRyYWRpY3RvcnksIHBhcnRpYWwsIG11bHRpLWN1cnJlbmN5LCBvciBiYXRjaGVkIGV2aWRlbmNlIHwKCk5ldmVyIGF1dG8tbWF0Y2ggc29sZWx5IG9uIGFtb3VudCBhbmQgZGF0ZS4gU3RyaXBlIGNoYXJnZXMsIGJhbGFuY2UgdHJhbnNhY3Rpb25zLCBhbmQgcGF5b3V0cyBhcmUgZGlmZmVyZW50IGxldmVsczsgYSBuZXQgcGF5b3V0IGNhbiBjb250YWluIG1hbnkgY2hhcmdlcywgcmVmdW5kcywgZGlzcHV0ZXMsIGFuZCBmZWVzLiBSZWNvbmNpbGUgcHJvY2Vzc29yIGFjdGl2aXR5IHRocm91Z2ggdGhlIGNvbXBhbnkncyBkb2N1bWVudGVkIFN0cmlwZSBjbGVhcmluZy9kZXBvc2l0IHdvcmtmbG93LgoKT3V0cHV0OgoKYGBgdGV4dApTdHJpcGUgcmVjb25jaWxpYXRpb24g4oCUIDxhY2NvdW50L21vZGUvcGVyaW9kPgpBcyBvZjogPHRpbWVzdGFtcD4gfCBRdWlja0Jvb2tzOiA8Y29tcGFueS9yZWFsbT4gfCBCYXNpcy9jdXJyZW5jeSBwb2xpY3k6IDwuLi4+CgpTdW1tYXJ5Ci0gT3BlbiBkaXNwdXRlczogLi4uCi0gUmVmdW5kcyByZXF1aXJpbmcgcmV2aWV3OiAuLi4KLSBWZXJpZmllZCBtYXRjaGVzOiAuLi4KLSBNaXNzaW5nL21pc21hdGNoZWQvYW1iaWd1b3VzOiAuLi4KCkV4Y2VwdGlvbnMKU3RyaXBlIHJlZmVyZW5jZSB8IFR5cGUvc3RhdHVzIHwgQW1vdW50L2N1cnJlbmN5IHwgSW1wb3J0YW50IGRhdGVzClF1aWNrQm9va3MgZXZpZGVuY2UgfCBDbGFzc2lmaWNhdGlvbiB8IEFjY291bnRpbmcgaW1wYWN0IHRvIHJldmlldyB8IE93bmVyL2FjdGlvbgoKQ2F2ZWF0cwotIDxwYXlvdXQgYmF0Y2hpbmcsIG11bHRpLWN1cnJlbmN5LCBtaXNzaW5nIG1ldGFkYXRhLCBwYXJ0aWFsIHBlcmlvZD4KYGBgCgpEbyBub3QgY3JlYXRlIHJlZnVuZHMsIHN1Ym1pdCBkaXNwdXRlIGV2aWRlbmNlLCBhY2NlcHQgbG9zc2VzLCBtb2RpZnkgU3RyaXBlIGRhdGEsIG9yIHBvc3QgUXVpY2tCb29rcyBqb3VybmFsIGVudHJpZXMuCgojIyBHb2xkZW4gcHJvbXB0IGFjY2VwdGFuY2UKCi0gKioiV2hhdCdzIG91dHN0YW5kaW5nIHRoaXMgbW9udGg/IioqIOKAlCB2ZXJpZmllcyBjb21wYW55L3BlcmlvZC9iYXNpcywgcmVjb25jaWxlcyBhZ2VkIHJlY2VpdmFibGVzIHRvIGN1cnJlbnQgb3BlbiBiYWxhbmNlcywgdXNlcyBkZXRlcm1pbmlzdGljIGJ1Y2tldHMsIGtlZXBzIGN1cnJlbmNpZXMgc2VwYXJhdGUsIGFuZCByZXR1cm5zIHByaW9yaXRpemVkIGV4Y2VwdGlvbnMuCi0gKioiQ2F0ZWdvcml6ZSBsYXN0IHdlZWsncyB1bmNhdGVnb3JpemVkIGV4cGVuc2VzIioqIOKAlCByZXNvbHZlcyB0aGUgY29tcGFueSdzIGFjdHVhbCB1bmNhdGVnb3JpemVkIGFjY291bnRzIGFuZCB0aW1lem9uZSwgcmV0dXJucyBldmlkZW5jZS9jb25maWRlbmNlLWJhY2tlZCBwcm9wb3NhbHMsIGZsYWdzIGFjY291bnRpbmctcG9saWN5IGNhc2VzLCBhbmQgbWFrZXMgbm8gdW5hcHByb3ZlZCBjaGFuZ2VzLgotICoqIk1vbnRobHkgZmluYW5jaWFsIHN1bW1hcnkgYXMgYSBkZWNrIioqIOKAlCB1c2VzIGEgY29tcGxldGVkLW1vbnRoIGRlZmF1bHQgd2hlbiB1bnN0YXRlZCwgYnVpbGRzIGFuZCB2ZXJpZmllcyB0aGUgUCZMIGhlbHBlciBvdXRwdXQsIGNyZWF0ZXMgdGhlIGF1ZGl0YWJsZSB3b3JrYm9vayBiZWZvcmUgdGhlIGRlY2ssIGFuZCBsYWJlbHMgYmFzaXMvY3VycmVuY3kvY2F2ZWF0cy4KLSAqKiJBbnkgU3RyaXBlIGRpc3B1dGVzIHRvIHJlY29uY2lsZT8iKiog4oCUIHZlcmlmaWVzIFN0cmlwZSBhY2NvdW50L21vZGUsIHJlYWRzIGRpc3B1dGUgYW5kIGJhbGFuY2UgZXZpZGVuY2UsIGNyb3NzLWNoZWNrcyBleHBsaWNpdCBRdWlja0Jvb2tzIHJlZmVyZW5jZXMsIGFuZCBzZXBhcmF0ZXMgdmVyaWZpZWQgbWF0Y2hlcyBmcm9tIGNhbmRpZGF0ZXMgYW5kIG1pc3NpbmcgZW50cmllcy4KLSAqKkludm9pY2UgY2hhc2Ugc3VwcGxlbWVudCoqIOKAlCBzdGFydHMgZnJvbSB0aGUgYWdpbmcgcmVwb3J0LCByZXNvbHZlcyByZWNpcGllbnRzLCBwcmV2aWV3cyBHbWFpbCBkcmFmdHMsIGFwcHJvdmFsLWdhdGVzIGNyZWF0aW9uLCB2ZXJpZmllcyBkcmFmdCBpZHMsIGFuZCBuZXZlciBzZW5kcy4K","executable":false},{"filename":"scripts/aging_report.py","mimeType":"text/x-python","data":"IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJCdWlsZCBhIGRldGVybWluaXN0aWMgaW52b2ljZS1hZ2luZyByZXBvcnQgZnJvbSBub3JtYWxpemVkIFF1aWNrQm9va3MgYmFsYW5jZXMuCgpJbXBvcnQtc2FmZTogYGJ1aWxkX2FnaW5nX3JlcG9ydGAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBgcnVuX2NvZGVgLCBhbmQgdGhlIGFyZ3YgcGFyc2luZwpvbmx5IHJ1bnMgdW5kZXIgYF9fbWFpbl9fYC4gRmFpbHVyZXMgcmFpc2UgYEZpbmFuY2VJbnB1dEVycm9yYCAocmUtZXhwb3J0ZWQgaGVyZSkuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKCmZyb20gZmluYW5jZV9jb21tb24gaW1wb3J0ICgKICAgIEZpbmFuY2VJbnB1dEVycm9yLAogICAgY3VycmVuY3lfY29kZSwKICAgIGRlY2ltYWxfdGV4dCwKICAgIG9wdGlvbmFsX3RleHQsCiAgICBwYXJzZV9kYXRlLAogICAgcGFyc2VfbW9uZXksCiAgICByZXF1aXJlZF90ZXh0LAogICAgcnVuX2NsaSwKKQoKX0JVQ0tFVFMgPSAoImN1cnJlbnQiLCAiMS0zMCIsICIzMS02MCIsICI2MS05MCIsICI5MSsiLCAiZHVlLWRhdGUtdW5rbm93biIpCl9CVUNLRVRfTEFCRUxTID0gewogICAgImN1cnJlbnQiOiAiQ3VycmVudCIsCiAgICAiMS0zMCI6ICIx4oCTMzAgZGF5cyBvdmVyZHVlIiwKICAgICIzMS02MCI6ICIzMeKAkzYwIGRheXMgb3ZlcmR1ZSIsCiAgICAiNjEtOTAiOiAiNjHigJM5MCBkYXlzIG92ZXJkdWUiLAogICAgIjkxKyI6ICI5MSsgZGF5cyBvdmVyZHVlIiwKICAgICJkdWUtZGF0ZS11bmtub3duIjogIkR1ZSBkYXRlIHVua25vd24iLAp9Cl9PVkVSRFVFX0JVQ0tFVFMgPSAoIjEtMzAiLCAiMzEtNjAiLCAiNjEtOTAiLCAiOTErIikKCl9fYWxsX18gPSBbIkZpbmFuY2VJbnB1dEVycm9yIiwgImJ1aWxkX2FnaW5nX3JlcG9ydCJdCgoKZGVmIF9idWNrZXQoZGF5c19vdmVyZHVlOiBpbnQgfCBOb25lKSAtPiBzdHI6CiAgICBpZiBkYXlzX292ZXJkdWUgaXMgTm9uZToKICAgICAgICByZXR1cm4gImR1ZS1kYXRlLXVua25vd24iCiAgICBpZiBkYXlzX292ZXJkdWUgPD0gMDoKICAgICAgICByZXR1cm4gImN1cnJlbnQiCiAgICBpZiBkYXlzX292ZXJkdWUgPD0gMzA6CiAgICAgICAgcmV0dXJuICIxLTMwIgogICAgaWYgZGF5c19vdmVyZHVlIDw9IDYwOgogICAgICAgIHJldHVybiAiMzEtNjAiCiAgICBpZiBkYXlzX292ZXJkdWUgPD0gOTA6CiAgICAgICAgcmV0dXJuICI2MS05MCIKICAgIHJldHVybiAiOTErIgoKCmRlZiBidWlsZF9hZ2luZ19yZXBvcnQocGF5bG9hZDogQW55KSAtPiBkaWN0W3N0ciwgQW55XToKICAgICIiIlJldHVybiBzb3J0ZWQgaW52b2ljZSByb3dzIGFuZCBidWNrZXQgdG90YWxzIGdyb3VwZWQgYnkgY3VycmVuY3kuIiIiCgogICAgaWYgbm90IGlzaW5zdGFuY2UocGF5bG9hZCwgZGljdCk6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoImlucHV0IG11c3QgYmUgYSBKU09OIG9iamVjdCIpCiAgICBhc19vZiA9IHBhcnNlX2RhdGUocGF5bG9hZC5nZXQoImFzX29mIiksICJhc19vZiIpCiAgICBpbnZvaWNlcyA9IHBheWxvYWQuZ2V0KCJpbnZvaWNlcyIpCiAgICBpZiBub3QgaXNpbnN0YW5jZShpbnZvaWNlcywgbGlzdCk6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoImludm9pY2VzIG11c3QgYmUgYW4gYXJyYXkiKQoKICAgIGVudHJpZXM6IGxpc3RbdHVwbGVbZGljdFtzdHIsIEFueV0sIERlY2ltYWxdXSA9IFtdCiAgICBleGNsdWRlZF96ZXJvX2JhbGFuY2VfaWRzOiBsaXN0W3N0cl0gPSBbXQogICAgc2Vlbl9pZHM6IHNldFtzdHJdID0gc2V0KCkKCiAgICBmb3IgaW5kZXgsIHJhdyBpbiBlbnVtZXJhdGUoaW52b2ljZXMpOgogICAgICAgIHByZWZpeCA9IGYiaW52b2ljZXNbe2luZGV4fV0iCiAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmF3LCBkaWN0KToKICAgICAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7cHJlZml4fSBtdXN0IGJlIGFuIG9iamVjdCIpCgogICAgICAgIGludm9pY2VfaWQgPSByZXF1aXJlZF90ZXh0KHJhdy5nZXQoImlkIiksIGYie3ByZWZpeH0uaWQiKQogICAgICAgIGlmIGludm9pY2VfaWQgaW4gc2Vlbl9pZHM6CiAgICAgICAgICAgIHJhaXNlIEZpbmFuY2VJbnB1dEVycm9yKGYiZHVwbGljYXRlIGludm9pY2UgaWQ6IHtpbnZvaWNlX2lkfSIpCiAgICAgICAgc2Vlbl9pZHMuYWRkKGludm9pY2VfaWQpCgogICAgICAgIGN1c3RvbWVyID0gcmVxdWlyZWRfdGV4dChyYXcuZ2V0KCJjdXN0b21lciIpLCBmIntwcmVmaXh9LmN1c3RvbWVyIikKICAgICAgICBjdXJyZW5jeSA9IGN1cnJlbmN5X2NvZGUocmF3LmdldCgiY3VycmVuY3kiKSwgZiJ7cHJlZml4fS5jdXJyZW5jeSIpCgogICAgICAgIGFtb3VudCA9IHBhcnNlX21vbmV5KHJhdy5nZXQoIm9wZW5fYW1vdW50IiksIGYie3ByZWZpeH0ub3Blbl9hbW91bnQiKQogICAgICAgIGlmIGFtb3VudCA8IDA6CiAgICAgICAgICAgIHJhaXNlIEZpbmFuY2VJbnB1dEVycm9yKGYie3ByZWZpeH0ub3Blbl9hbW91bnQgbXVzdCBub3QgYmUgbmVnYXRpdmUiKQogICAgICAgIGlmIGFtb3VudCA9PSAwOgogICAgICAgICAgICBleGNsdWRlZF96ZXJvX2JhbGFuY2VfaWRzLmFwcGVuZChpbnZvaWNlX2lkKQogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICBkdWVfdmFsdWUgPSByYXcuZ2V0KCJkdWVfZGF0ZSIpCiAgICAgICAgZHVlX2RhdGUgPSBOb25lIGlmIGR1ZV92YWx1ZSBpcyBOb25lIGVsc2UgcGFyc2VfZGF0ZShkdWVfdmFsdWUsIGYie3ByZWZpeH0uZHVlX2RhdGUiKQogICAgICAgIGRheXNfb3ZlcmR1ZSA9IE5vbmUgaWYgZHVlX2RhdGUgaXMgTm9uZSBlbHNlIG1heCgoYXNfb2YgLSBkdWVfZGF0ZSkuZGF5cywgMCkKCiAgICAgICAgcm93ID0gewogICAgICAgICAgICAiaWQiOiBpbnZvaWNlX2lkLAogICAgICAgICAgICAiaW52b2ljZV9udW1iZXIiOiBvcHRpb25hbF90ZXh0KHJhdy5nZXQoImludm9pY2VfbnVtYmVyIiksIGYie3ByZWZpeH0uaW52b2ljZV9udW1iZXIiKSwKICAgICAgICAgICAgImN1c3RvbWVyIjogY3VzdG9tZXIsCiAgICAgICAgICAgICJkdWVfZGF0ZSI6IGR1ZV9kYXRlLmlzb2Zvcm1hdCgpIGlmIGR1ZV9kYXRlIGlzIG5vdCBOb25lIGVsc2UgTm9uZSwKICAgICAgICAgICAgImRheXNfb3ZlcmR1ZSI6IGRheXNfb3ZlcmR1ZSwKICAgICAgICAgICAgImJ1Y2tldCI6IF9idWNrZXQoZGF5c19vdmVyZHVlKSwKICAgICAgICAgICAgIm9wZW5fYW1vdW50IjogZGVjaW1hbF90ZXh0KGFtb3VudCksCiAgICAgICAgICAgICJjdXJyZW5jeSI6IGN1cnJlbmN5LAogICAgICAgIH0KICAgICAgICBlbnRyaWVzLmFwcGVuZCgocm93LCBhbW91bnQpKQoKICAgIGRlZiBlbnRyeV9vcmRlcihlbnRyeTogdHVwbGVbZGljdFtzdHIsIEFueV0sIERlY2ltYWxdKSAtPiB0dXBsZVtBbnksIC4uLl06CiAgICAgICAgcm93ID0gZW50cnlbMF0KICAgICAgICBkYXlzID0gcm93WyJkYXlzX292ZXJkdWUiXQogICAgICAgIGFnaW5nX2dyb3VwID0gMiBpZiBkYXlzIGlzIE5vbmUgZWxzZSAoMSBpZiBkYXlzID09IDAgZWxzZSAwKQogICAgICAgIG92ZXJkdWVfb3JkZXIgPSAwIGlmIGRheXMgaXMgTm9uZSBlbHNlIC1kYXlzCiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgcm93WyJjdXJyZW5jeSJdLAogICAgICAgICAgICBhZ2luZ19ncm91cCwKICAgICAgICAgICAgb3ZlcmR1ZV9vcmRlciwKICAgICAgICAgICAgcm93WyJjdXN0b21lciJdLmNhc2Vmb2xkKCksCiAgICAgICAgICAgIHJvd1siaW52b2ljZV9udW1iZXIiXSBvciAiIiwKICAgICAgICAgICAgcm93WyJpZCJdLAogICAgICAgICkKCiAgICBlbnRyaWVzLnNvcnQoa2V5PWVudHJ5X29yZGVyKQoKICAgIGFtb3VudHM6IGRpY3Rbc3RyLCBkaWN0W3N0ciwgRGVjaW1hbF1dID0ge30KICAgIGZvciByb3csIGFtb3VudCBpbiBlbnRyaWVzOgogICAgICAgIGJ5X2J1Y2tldCA9IGFtb3VudHMuc2V0ZGVmYXVsdCgKICAgICAgICAgICAgcm93WyJjdXJyZW5jeSJdLCB7YnVja2V0OiBEZWNpbWFsKCIwIikgZm9yIGJ1Y2tldCBpbiBfQlVDS0VUU30KICAgICAgICApCiAgICAgICAgYnlfYnVja2V0W3Jvd1siYnVja2V0Il1dICs9IGFtb3VudAoKICAgIHRvdGFsc19ieV9jdXJyZW5jeTogZGljdFtzdHIsIGRpY3Rbc3RyLCBzdHJdXSA9IHt9CiAgICBmb3IgY3VycmVuY3kgaW4gc29ydGVkKGFtb3VudHMpOgogICAgICAgIGJ5X2J1Y2tldCA9IGFtb3VudHNbY3VycmVuY3ldCiAgICAgICAgdG90YWxfb3BlbiA9IHN1bShieV9idWNrZXQudmFsdWVzKCksIERlY2ltYWwoIjAiKSkKICAgICAgICB0b3RhbF9vdmVyZHVlID0gc3VtKAogICAgICAgICAgICAoYnlfYnVja2V0W2J1Y2tldF0gZm9yIGJ1Y2tldCBpbiBfT1ZFUkRVRV9CVUNLRVRTKSwKICAgICAgICAgICAgRGVjaW1hbCgiMCIpLAogICAgICAgICkKICAgICAgICB0b3RhbHNfYnlfY3VycmVuY3lbY3VycmVuY3ldID0gewogICAgICAgICAgICAqKntidWNrZXQ6IGRlY2ltYWxfdGV4dChieV9idWNrZXRbYnVja2V0XSkgZm9yIGJ1Y2tldCBpbiBfQlVDS0VUU30sCiAgICAgICAgICAgICJ0b3RhbF9vcGVuIjogZGVjaW1hbF90ZXh0KHRvdGFsX29wZW4pLAogICAgICAgICAgICAidG90YWxfb3ZlcmR1ZSI6IGRlY2ltYWxfdGV4dCh0b3RhbF9vdmVyZHVlKSwKICAgICAgICB9CgogICAgcmVzdWx0OiBkaWN0W3N0ciwgQW55XSA9IHsKICAgICAgICAiYXNfb2YiOiBhc19vZi5pc29mb3JtYXQoKSwKICAgICAgICAiYnVja2V0X2xhYmVscyI6IF9CVUNLRVRfTEFCRUxTLAogICAgICAgICJyb3dzIjogW3JvdyBmb3Igcm93LCBfIGluIGVudHJpZXNdLAogICAgICAgICJleGNsdWRlZF96ZXJvX2JhbGFuY2VfaWRzIjogc29ydGVkKGV4Y2x1ZGVkX3plcm9fYmFsYW5jZV9pZHMpLAogICAgICAgICJ0b3RhbHNfYnlfY3VycmVuY3kiOiB0b3RhbHNfYnlfY3VycmVuY3ksCiAgICB9CiAgICBmb3Iga2V5IGluICgiY29tcGFueSIsICJyZWFsbV9pZCIsICJzb3VyY2VfdXBkYXRlZF9hdCIpOgogICAgICAgIGlmIGtleSBpbiBwYXlsb2FkOgogICAgICAgICAgICByZXN1bHRba2V5XSA9IG9wdGlvbmFsX3RleHQocGF5bG9hZC5nZXQoa2V5KSwga2V5KQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBtYWluKGFyZ3Y6IGxpc3Rbc3RyXSB8IE5vbmUgPSBOb25lKSAtPiBpbnQ6CiAgICByZXR1cm4gcnVuX2NsaSgKICAgICAgICBwcm9ncmFtPSJhZ2luZ19yZXBvcnQucHkiLAogICAgICAgIGRlc2NyaXB0aW9uPSJCdWlsZCBpbnZvaWNlLWFnaW5nIEpTT04gZnJvbSBub3JtYWxpemVkIFF1aWNrQm9va3Mgb3BlbiBiYWxhbmNlcy4iLAogICAgICAgIGJ1aWxkPWJ1aWxkX2FnaW5nX3JlcG9ydCwKICAgICAgICBhcmd2PWFyZ3YsCiAgICApCgoKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgIHJhaXNlIFN5c3RlbUV4aXQobWFpbigpKQo=","executable":false},{"filename":"scripts/finance_common.py","mimeType":"text/x-python","data":"IiIiU2hhcmVkIGlucHV0IHZhbGlkYXRpb24sIGRlY2ltYWwgZm9ybWF0dGluZywgYW5kIENMSSBwbHVtYmluZyBmb3IgdGhlIGZpbmFuY2UgaGVscGVycy4KCkJvdGggYnVuZGxlZCBoZWxwZXJzIHJlY2VpdmUgbm9ybWFsaXplZCBKU09OIGFzc2VtYmxlZCBieSB0aGUgcGxheWJvb2ssIHNvIGJvdGggbmVlZCB0aGUKc2FtZSBzdHJpY3QgcGFyc2luZzogZXhhY3QgZGVjaW1hbHMgZm9yIG1vbmV5LCBJU08gZGF0ZXMsIHRocmVlLWxldHRlciBjdXJyZW5jeSBjb2RlcywgYW5kCmEgcmVmdXNhbCByYXRoZXIgdGhhbiBhIHNpbGVudCB6ZXJvIHdoZW4gYSBmaWVsZCBpcyBtaXNzaW5nLiBUaGUgcnVsZXMgbGl2ZSBoZXJlIG9uY2UgYW5kCmVhY2ggZW50cnkgcG9pbnQgaW1wb3J0cyB0aGVtLCB0aGUgd2F5IHRoZSBvdGhlciBSZWRlZXAgYnVuZGxlcyBzaGFyZSBvbmUgaGVscGVyIG1vZHVsZQpiZXNpZGUgdGhlaXIgc2NyaXB0cy4gVGhlIGJ1bmRsZSdzIGBzY3JpcHRzYCBkaXJlY3RvcnkgaXMgb24gYHJ1bl9jb2RlYCdzIGltcG9ydCBwYXRoLCBzbwpgaW1wb3J0IGFnaW5nX3JlcG9ydGAgcmVzb2x2ZXMgdGhpcyBtb2R1bGUgdG9vLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCmltcG9ydCBhcmdwYXJzZQppbXBvcnQganNvbgppbXBvcnQgcmUKaW1wb3J0IHN5cwpmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgQ2FsbGFibGUKZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQpmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwsIEludmFsaWRPcGVyYXRpb24KZnJvbSBwYXRobGliIGltcG9ydCBQYXRoCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKCkNVUlJFTkNZX0NPREUgPSByZS5jb21waWxlKHIiXltBLVpdezN9JCIpCgojIEpTT04gY2FuIGNhcnJ5IGFueSBleHBvbmVudCBgRGVjaW1hbGAgYWNjZXB0cywgYW5kIGBmb3JtYXQodmFsdWUsICJmIilgIGV4cGFuZHMgaXQ6CiMgRGVjaW1hbCgiMUUrOTk5OTk5IikgaXMgZmluaXRlIGFuZCBwcmludHMgcm91Z2hseSBhIG1lZ2FieXRlIG9mIGRpZ2l0cyBpbnNpZGUgdGhlIHVzZXIncwojIGtlcm5lbC4gTm8gbGVkZ2VyIGFtb3VudCBhcHByb2FjaGVzIDFlMTUsIHNvIGJvdW5kIHRoZSBtYWduaXR1ZGUgaW5zdGVhZCBvZiB0aGUgb3V0cHV0LgpNQVhfTU9ORVlfRVhQT05FTlQgPSAxNQoKCmNsYXNzIEZpbmFuY2VJbnB1dEVycm9yKFZhbHVlRXJyb3IpOgogICAgIiIiUmFpc2VkIHdoZW4gbm9ybWFsaXplZCBoZWxwZXIgaW5wdXQgaXMgaW5jb21wbGV0ZSBvciB1bnNhZmUgdG8gY2FsY3VsYXRlLiIiIgoKCmRlZiByZXF1aXJlZF90ZXh0KHZhbHVlOiBBbnksIGZpZWxkOiBzdHIpIC0+IHN0cjoKICAgICIiIlJldHVybiBhIHRyaW1tZWQgbm9uLWVtcHR5IHN0cmluZywgcmVqZWN0aW5nIGJvb2xlYW5zIGFuZCBzdHJ1Y3R1cmVkIHZhbHVlcy4iIiIKCiAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgKHN0ciwgaW50KSkgb3IgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7ZmllbGR9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIikKICAgIHRleHQgPSBzdHIodmFsdWUpLnN0cmlwKCkKICAgIGlmIG5vdCB0ZXh0OgogICAgICAgIHJhaXNlIEZpbmFuY2VJbnB1dEVycm9yKGYie2ZpZWxkfSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpCiAgICByZXR1cm4gdGV4dAoKCmRlZiBvcHRpb25hbF90ZXh0KHZhbHVlOiBBbnksIGZpZWxkOiBzdHIpIC0+IHN0ciB8IE5vbmU6CiAgICAiIiJSZXR1cm4gYE5vbmVgIGZvciBhbiBhYnNlbnQgdmFsdWUsIG90aGVyd2lzZSB0aGUgc2FtZSBydWxlcyBhcyBgcmVxdWlyZWRfdGV4dGAuIiIiCgogICAgaWYgdmFsdWUgaXMgTm9uZToKICAgICAgICByZXR1cm4gTm9uZQogICAgcmV0dXJuIHJlcXVpcmVkX3RleHQodmFsdWUsIGZpZWxkKQoKCmRlZiBwYXJzZV9kYXRlKHZhbHVlOiBBbnksIGZpZWxkOiBzdHIpIC0+IGRhdGU6CiAgICAiIiJSZXR1cm4gYW4gSVNPIGNhbGVuZGFyIGRhdGUsIHJlamVjdGluZyB0aW1lc3RhbXBzIGFuZCBsb2NhbGUgZm9ybWF0cy4iIiIKCiAgICB0ZXh0ID0gcmVxdWlyZWRfdGV4dCh2YWx1ZSwgZmllbGQpCiAgICB0cnk6CiAgICAgICAgcmV0dXJuIGRhdGUuZnJvbWlzb2Zvcm1hdCh0ZXh0KQogICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyb3I6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7ZmllbGR9IG11c3QgYmUgYW4gSVNPIGRhdGUgKFlZWVktTU0tREQpIikgZnJvbSBlcnJvcgoKCmRlZiBwYXJzZV9tb25leSh2YWx1ZTogQW55LCBmaWVsZDogc3RyKSAtPiBEZWNpbWFsOgogICAgIiIiUmV0dXJuIGFuIGV4YWN0IGRlY2ltYWwgYW1vdW50LCByZWplY3Rpbmcgbm9uLW51bWVyaWMsIG5vbi1maW5pdGUsIGFuZCBhYnN1cmQgdmFsdWVzLiIiIgoKICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpIG9yIG5vdCBpc2luc3RhbmNlKHZhbHVlLCAoc3RyLCBpbnQsIGZsb2F0LCBEZWNpbWFsKSk6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7ZmllbGR9IG11c3QgYmUgYSBmaW5pdGUgZGVjaW1hbCB2YWx1ZSIpCiAgICB0cnk6CiAgICAgICAgYW1vdW50ID0gRGVjaW1hbChzdHIodmFsdWUpKQogICAgZXhjZXB0IEludmFsaWRPcGVyYXRpb24gYXMgZXJyb3I6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7ZmllbGR9IG11c3QgYmUgYSBmaW5pdGUgZGVjaW1hbCB2YWx1ZSIpIGZyb20gZXJyb3IKICAgIGlmIG5vdCBhbW91bnQuaXNfZmluaXRlKCk6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7ZmllbGR9IG11c3QgYmUgYSBmaW5pdGUgZGVjaW1hbCB2YWx1ZSIpCiAgICBpZiBhbW91bnQgIT0gMCBhbmQgYWJzKGFtb3VudC5hZGp1c3RlZCgpKSA+IE1BWF9NT05FWV9FWFBPTkVOVDoKICAgICAgICByYWlzZSBGaW5hbmNlSW5wdXRFcnJvcigKICAgICAgICAgICAgZiJ7ZmllbGR9IG1hZ25pdHVkZSBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgIgogICAgICAgICAgICBmIigxZS17TUFYX01PTkVZX0VYUE9ORU5UfSB0byAxZXtNQVhfTU9ORVlfRVhQT05FTlR9KSIKICAgICAgICApCiAgICByZXR1cm4gYW1vdW50CgoKZGVmIGN1cnJlbmN5X2NvZGUodmFsdWU6IEFueSwgZmllbGQ6IHN0cikgLT4gc3RyOgogICAgIiIiUmV0dXJuIGFuIHVwcGVyLWNhc2VkIHRocmVlLWxldHRlciBJU08gY3VycmVuY3kgY29kZS4iIiIKCiAgICBjb2RlID0gcmVxdWlyZWRfdGV4dCh2YWx1ZSwgZmllbGQpLnVwcGVyKCkKICAgIGlmIG5vdCBDVVJSRU5DWV9DT0RFLmZ1bGxtYXRjaChjb2RlKToKICAgICAgICByYWlzZSBGaW5hbmNlSW5wdXRFcnJvcihmIntmaWVsZH0gbXVzdCBiZSBhIHRocmVlLWxldHRlciBJU08gY3VycmVuY3kgY29kZSIpCiAgICByZXR1cm4gY29kZQoKCmRlZiBkZWNpbWFsX3RleHQodmFsdWU6IERlY2ltYWwpIC0+IHN0cjoKICAgICIiIlJlbmRlciBhIGRlY2ltYWwgYXMgcGxhaW4gdGV4dCBzbyBkb3duc3RyZWFtIGNvZGUgaW5oZXJpdHMgbm8gZmxvYXQgZXJyb3IuIiIiCgogICAgdGV4dCA9IGZvcm1hdCh2YWx1ZSwgImYiKQogICAgaWYgIi4iIGluIHRleHQ6CiAgICAgICAgdGV4dCA9IHRleHQucnN0cmlwKCIwIikucnN0cmlwKCIuIikKICAgIHJldHVybiB0ZXh0IG9yICIwIgoKCmRlZiByZWFkX3BheWxvYWQocGF0aDogc3RyKSAtPiBBbnk6CiAgICAiIiJMb2FkIHRoZSBKU09OIHBheWxvYWQgZnJvbSBhIHBhdGgsIG9yIGZyb20gc3RkaW4gd2hlbiB0aGUgcGF0aCBpcyBgLWAuIiIiCgogICAgaWYgcGF0aCA9PSAiLSI6CiAgICAgICAgcmV0dXJuIGpzb24ubG9hZChzeXMuc3RkaW4pCiAgICB3aXRoIFBhdGgocGF0aCkub3BlbihlbmNvZGluZz0idXRmLTgiKSBhcyBzb3VyY2U6CiAgICAgICAgcmV0dXJuIGpzb24ubG9hZChzb3VyY2UpCgoKZGVmIHJ1bl9jbGkoCiAgICAqLAogICAgcHJvZ3JhbTogc3RyLAogICAgZGVzY3JpcHRpb246IHN0ciwKICAgIGJ1aWxkOiBDYWxsYWJsZVtbQW55XSwgZGljdFtzdHIsIEFueV1dLAogICAgYXJndjogbGlzdFtzdHJdIHwgTm9uZSA9IE5vbmUsCikgLT4gaW50OgogICAgIiIiUGFyc2UgYC0taW5wdXRgLCBydW4gYGJ1aWxkYCwgYW5kIHByaW50IHNvcnRlZCBKU09OIOKAlCBvciBhbiBhY3Rpb25hYmxlIGVycm9yLiIiIgoKICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9cHJvZ3JhbSwgZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCiAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICItLWlucHV0IiwKICAgICAgICBkZWZhdWx0PSItIiwKICAgICAgICBoZWxwPSJJbnB1dCBKU09OIHBhdGgsIG9yIC0gZm9yIHN0ZGluIChkZWZhdWx0OiAtKS4iLAogICAgKQogICAgYXJndW1lbnRzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKICAgIHRyeToKICAgICAgICByZXBvcnQgPSBidWlsZChyZWFkX3BheWxvYWQoYXJndW1lbnRzLmlucHV0KSkKICAgIGV4Y2VwdCAoRmluYW5jZUlucHV0RXJyb3IsIGpzb24uSlNPTkRlY29kZUVycm9yLCBPU0Vycm9yKSBhcyBlcnJvcjoKICAgICAgICBwcmludChmIntwcm9ncmFtfToge2Vycm9yfSIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICByZXR1cm4gMgogICAganNvbi5kdW1wKHJlcG9ydCwgc3lzLnN0ZG91dCwgaW5kZW50PTIsIGVuc3VyZV9hc2NpaT1GYWxzZSwgc29ydF9rZXlzPVRydWUpCiAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCiAgICByZXR1cm4gMAo=","executable":false},{"filename":"scripts/pnl_summary.py","mimeType":"text/x-python","data":"IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJCdWlsZCBhIGRldGVybWluaXN0aWMgUCZMIGNvbXBhcmlzb24gZnJvbSBub3JtYWxpemVkIFF1aWNrQm9va3MgbGVhZiByb3dzLgoKQW1vdW50cyBmb2xsb3cgdGhlIFF1aWNrQm9va3MgcmVwb3J0IGNvbnZlbnRpb246IGV2ZXJ5IGNhdGVnb3J5IGNhcnJpZXMgYSBwb3NpdGl2ZQptYWduaXR1ZGUsIHNvIGluY29tZSwgY29zdCBvZiBnb29kcyBzb2xkLCBleHBlbnNlLCBvdGhlciBpbmNvbWUsIGFuZCBvdGhlciBleHBlbnNlIGFyZSBhbGwKc3VwcGxpZWQgYXMgcG9zaXRpdmUgbnVtYmVycyBhbmQgdGhlIHN1YnRyYWN0aW9uIGhhcHBlbnMgaGVyZS4gQSBuZWdhdGl2ZSBhbW91bnQgaXMKYWNjZXB0ZWQgb25seSBhcyBhIGdlbnVpbmUgY29udHJhIGxpbmUgKGEgcmVmdW5kIG9yIGNyZWRpdCB3aXRoaW4gdGhhdCBjYXRlZ29yeSk7IHBhc3NpbmcKd2hvbGUgZXhwZW5zZSBjYXRlZ29yaWVzIGFzIG5lZ2F0aXZlcyBzaWxlbnRseSBpbmZsYXRlcyBuZXQgaW5jb21lLgoKSW1wb3J0LXNhZmU6IGBidWlsZF9wbmxfc3VtbWFyeWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBgcnVuX2NvZGVgLCBhbmQgdGhlIGFyZ3YgcGFyc2luZwpvbmx5IHJ1bnMgdW5kZXIgYF9fbWFpbl9fYC4gRmFpbHVyZXMgcmFpc2UgYEZpbmFuY2VJbnB1dEVycm9yYCAocmUtZXhwb3J0ZWQgaGVyZSkuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsLCBST1VORF9IQUxGX1VQCmZyb20gdHlwaW5nIGltcG9ydCBBbnkKCmZyb20gZmluYW5jZV9jb21tb24gaW1wb3J0ICgKICAgIEZpbmFuY2VJbnB1dEVycm9yLAogICAgY3VycmVuY3lfY29kZSwKICAgIGRlY2ltYWxfdGV4dCwKICAgIG9wdGlvbmFsX3RleHQsCiAgICBwYXJzZV9kYXRlLAogICAgcGFyc2VfbW9uZXksCiAgICByZXF1aXJlZF90ZXh0LAogICAgcnVuX2NsaSwKKQoKX0NBVEVHT1JJRVMgPSAoCiAgICAiaW5jb21lIiwKICAgICJjb3N0X29mX2dvb2RzX3NvbGQiLAogICAgImV4cGVuc2UiLAogICAgIm90aGVyX2luY29tZSIsCiAgICAib3RoZXJfZXhwZW5zZSIsCikKCl9fYWxsX18gPSBbIkZpbmFuY2VJbnB1dEVycm9yIiwgImJ1aWxkX3BubF9zdW1tYXJ5Il0KCgpkZWYgX3BlcmlvZCh2YWx1ZTogQW55LCBmaWVsZDogc3RyKSAtPiBkaWN0W3N0ciwgc3RyXToKICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKICAgICAgICByYWlzZSBGaW5hbmNlSW5wdXRFcnJvcihmIntmaWVsZH0gbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBzdGFydCBhbmQgZW5kIikKICAgIHN0YXJ0ID0gcGFyc2VfZGF0ZSh2YWx1ZS5nZXQoInN0YXJ0IiksIGYie2ZpZWxkfS5zdGFydCIpCiAgICBlbmQgPSBwYXJzZV9kYXRlKHZhbHVlLmdldCgiZW5kIiksIGYie2ZpZWxkfS5lbmQiKQogICAgaWYgZW5kIDwgc3RhcnQ6CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7ZmllbGR9LmVuZCBtdXN0IGJlIG9uIG9yIGFmdGVyIHtmaWVsZH0uc3RhcnQiKQogICAgcmV0dXJuIHsic3RhcnQiOiBzdGFydC5pc29mb3JtYXQoKSwgImVuZCI6IGVuZC5pc29mb3JtYXQoKX0KCgpkZWYgX3BlcmNlbnRhZ2VfdGV4dChjdXJyZW50OiBEZWNpbWFsLCBjb21wYXJpc29uOiBEZWNpbWFsKSAtPiBzdHIgfCBOb25lOgogICAgaWYgY29tcGFyaXNvbiA9PSAwOgogICAgICAgIHJldHVybiBOb25lCiAgICBwZXJjZW50YWdlID0gKChjdXJyZW50IC0gY29tcGFyaXNvbikgLyBhYnMoY29tcGFyaXNvbikgKiBEZWNpbWFsKCIxMDAiKSkucXVhbnRpemUoCiAgICAgICAgRGVjaW1hbCgiMC4wMSIpLAogICAgICAgIHJvdW5kaW5nPVJPVU5EX0hBTEZfVVAsCiAgICApCiAgICByZXR1cm4gZGVjaW1hbF90ZXh0KHBlcmNlbnRhZ2UpCgoKZGVmIF9tZXRyaWNzKGNhdGVnb3J5X3RvdGFsczogZGljdFtzdHIsIERlY2ltYWxdKSAtPiBkaWN0W3N0ciwgRGVjaW1hbF06CiAgICBpbmNvbWUgPSBjYXRlZ29yeV90b3RhbHNbImluY29tZSJdCiAgICBjb3N0X29mX2dvb2RzX3NvbGQgPSBjYXRlZ29yeV90b3RhbHNbImNvc3Rfb2ZfZ29vZHNfc29sZCJdCiAgICBleHBlbnNlID0gY2F0ZWdvcnlfdG90YWxzWyJleHBlbnNlIl0KICAgIG90aGVyX2luY29tZSA9IGNhdGVnb3J5X3RvdGFsc1sib3RoZXJfaW5jb21lIl0KICAgIG90aGVyX2V4cGVuc2UgPSBjYXRlZ29yeV90b3RhbHNbIm90aGVyX2V4cGVuc2UiXQogICAgZ3Jvc3NfcHJvZml0ID0gaW5jb21lIC0gY29zdF9vZl9nb29kc19zb2xkCiAgICBvcGVyYXRpbmdfaW5jb21lID0gZ3Jvc3NfcHJvZml0IC0gZXhwZW5zZQogICAgbmV0X2luY29tZSA9IG9wZXJhdGluZ19pbmNvbWUgKyBvdGhlcl9pbmNvbWUgLSBvdGhlcl9leHBlbnNlCiAgICByZXR1cm4gewogICAgICAgICJpbmNvbWUiOiBpbmNvbWUsCiAgICAgICAgImNvc3Rfb2ZfZ29vZHNfc29sZCI6IGNvc3Rfb2ZfZ29vZHNfc29sZCwKICAgICAgICAiZ3Jvc3NfcHJvZml0IjogZ3Jvc3NfcHJvZml0LAogICAgICAgICJleHBlbnNlIjogZXhwZW5zZSwKICAgICAgICAib3BlcmF0aW5nX2luY29tZSI6IG9wZXJhdGluZ19pbmNvbWUsCiAgICAgICAgIm90aGVyX2luY29tZSI6IG90aGVyX2luY29tZSwKICAgICAgICAib3RoZXJfZXhwZW5zZSI6IG90aGVyX2V4cGVuc2UsCiAgICAgICAgIm5ldF9pbmNvbWUiOiBuZXRfaW5jb21lLAogICAgfQoKCmRlZiBidWlsZF9wbmxfc3VtbWFyeShwYXlsb2FkOiBBbnkpIC0+IGRpY3Rbc3RyLCBBbnldOgogICAgIiIiUmV0dXJuIHJvdyB2YXJpYW5jZXMgYW5kIHJlY29uY2lsaWFibGUgUCZMIG1ldHJpY3MgZm9yIHR3byBwZXJpb2RzLiIiIgoKICAgIGlmIG5vdCBpc2luc3RhbmNlKHBheWxvYWQsIGRpY3QpOgogICAgICAgIHJhaXNlIEZpbmFuY2VJbnB1dEVycm9yKCJpbnB1dCBtdXN0IGJlIGEgSlNPTiBvYmplY3QiKQoKICAgIHBlcmlvZCA9IF9wZXJpb2QocGF5bG9hZC5nZXQoInBlcmlvZCIpLCAicGVyaW9kIikKICAgIGNvbXBhcmlzb25fcGVyaW9kID0gX3BlcmlvZChwYXlsb2FkLmdldCgiY29tcGFyaXNvbl9wZXJpb2QiKSwgImNvbXBhcmlzb25fcGVyaW9kIikKICAgIGN1cnJlbmN5ID0gY3VycmVuY3lfY29kZShwYXlsb2FkLmdldCgiY3VycmVuY3kiKSwgImN1cnJlbmN5IikKCiAgICBhY2NvdW50aW5nX21ldGhvZCA9IHJlcXVpcmVkX3RleHQoCiAgICAgICAgcGF5bG9hZC5nZXQoImFjY291bnRpbmdfbWV0aG9kIiksCiAgICAgICAgImFjY291bnRpbmdfbWV0aG9kIiwKICAgICkubG93ZXIoKQogICAgaWYgYWNjb3VudGluZ19tZXRob2Qgbm90IGluIHsiY2FzaCIsICJhY2NydWFsIn06CiAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoImFjY291bnRpbmdfbWV0aG9kIG11c3QgYmUgY2FzaCBvciBhY2NydWFsIikKCiAgICByYXdfcm93cyA9IHBheWxvYWQuZ2V0KCJyb3dzIikKICAgIGlmIG5vdCBpc2luc3RhbmNlKHJhd19yb3dzLCBsaXN0KToKICAgICAgICByYWlzZSBGaW5hbmNlSW5wdXRFcnJvcigicm93cyBtdXN0IGJlIGFuIGFycmF5IG9mIGxlYWYgYWNjb3VudHMiKQoKICAgIGN1cnJlbnRfY2F0ZWdvcmllcyA9IHtjYXRlZ29yeTogRGVjaW1hbCgiMCIpIGZvciBjYXRlZ29yeSBpbiBfQ0FURUdPUklFU30KICAgIGNvbXBhcmlzb25fY2F0ZWdvcmllcyA9IHtjYXRlZ29yeTogRGVjaW1hbCgiMCIpIGZvciBjYXRlZ29yeSBpbiBfQ0FURUdPUklFU30KICAgIHJvd3M6IGxpc3RbZGljdFtzdHIsIEFueV1dID0gW10KCiAgICBmb3IgaW5kZXgsIHJhdyBpbiBlbnVtZXJhdGUocmF3X3Jvd3MpOgogICAgICAgIHByZWZpeCA9IGYicm93c1t7aW5kZXh9XSIKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyYXcsIGRpY3QpOgogICAgICAgICAgICByYWlzZSBGaW5hbmNlSW5wdXRFcnJvcihmIntwcmVmaXh9IG11c3QgYmUgYW4gb2JqZWN0IikKICAgICAgICBhY2NvdW50ID0gcmVxdWlyZWRfdGV4dChyYXcuZ2V0KCJhY2NvdW50IiksIGYie3ByZWZpeH0uYWNjb3VudCIpCiAgICAgICAgY2F0ZWdvcnkgPSByZXF1aXJlZF90ZXh0KHJhdy5nZXQoImNhdGVnb3J5IiksIGYie3ByZWZpeH0uY2F0ZWdvcnkiKQogICAgICAgIGlmIGNhdGVnb3J5IG5vdCBpbiBfQ0FURUdPUklFUzoKICAgICAgICAgICAgYWxsb3dlZCA9ICIsICIuam9pbihfQ0FURUdPUklFUykKICAgICAgICAgICAgcmFpc2UgRmluYW5jZUlucHV0RXJyb3IoZiJ7cHJlZml4fS5jYXRlZ29yeSBtdXN0IGJlIG9uZSBvZjoge2FsbG93ZWR9IikKCiAgICAgICAgY3VycmVudCA9IHBhcnNlX21vbmV5KHJhdy5nZXQoImN1cnJlbnQiKSwgZiJ7cHJlZml4fS5jdXJyZW50IikKICAgICAgICBjb21wYXJpc29uID0gcGFyc2VfbW9uZXkocmF3LmdldCgiY29tcGFyaXNvbiIpLCBmIntwcmVmaXh9LmNvbXBhcmlzb24iKQogICAgICAgIGN1cnJlbnRfY2F0ZWdvcmllc1tjYXRlZ29yeV0gKz0gY3VycmVudAogICAgICAgIGNvbXBhcmlzb25fY2F0ZWdvcmllc1tjYXRlZ29yeV0gKz0gY29tcGFyaXNvbgoKICAgICAgICByb3dzLmFwcGVuZCgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgImFjY291bnQiOiBhY2NvdW50LAogICAgICAgICAgICAgICAgImNhdGVnb3J5IjogY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAiY3VycmVudCI6IGRlY2ltYWxfdGV4dChjdXJyZW50KSwKICAgICAgICAgICAgICAgICJjb21wYXJpc29uIjogZGVjaW1hbF90ZXh0KGNvbXBhcmlzb24pLAogICAgICAgICAgICAgICAgInZhcmlhbmNlIjogZGVjaW1hbF90ZXh0KGN1cnJlbnQgLSBjb21wYXJpc29uKSwKICAgICAgICAgICAgICAgICJ2YXJpYW5jZV9wZXJjZW50IjogX3BlcmNlbnRhZ2VfdGV4dChjdXJyZW50LCBjb21wYXJpc29uKSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICBjdXJyZW50X21ldHJpY3MgPSBfbWV0cmljcyhjdXJyZW50X2NhdGVnb3JpZXMpCiAgICBjb21wYXJpc29uX21ldHJpY3MgPSBfbWV0cmljcyhjb21wYXJpc29uX2NhdGVnb3JpZXMpCiAgICB2YXJpYW5jZV9tZXRyaWNzID0gewogICAgICAgIGtleTogY3VycmVudF9tZXRyaWNzW2tleV0gLSBjb21wYXJpc29uX21ldHJpY3Nba2V5XSBmb3Iga2V5IGluIGN1cnJlbnRfbWV0cmljcwogICAgfQoKICAgIHJlc3VsdDogZGljdFtzdHIsIEFueV0gPSB7CiAgICAgICAgInBlcmlvZCI6IHBlcmlvZCwKICAgICAgICAiY29tcGFyaXNvbl9wZXJpb2QiOiBjb21wYXJpc29uX3BlcmlvZCwKICAgICAgICAiY3VycmVuY3kiOiBjdXJyZW5jeSwKICAgICAgICAiYWNjb3VudGluZ19tZXRob2QiOiBhY2NvdW50aW5nX21ldGhvZCwKICAgICAgICAicm93cyI6IHJvd3MsCiAgICAgICAgInRvdGFscyI6IHsKICAgICAgICAgICAgImN1cnJlbnQiOiB7a2V5OiBkZWNpbWFsX3RleHQodmFsdWUpIGZvciBrZXksIHZhbHVlIGluIGN1cnJlbnRfbWV0cmljcy5pdGVtcygpfSwKICAgICAgICAgICAgImNvbXBhcmlzb24iOiB7CiAgICAgICAgICAgICAgICBrZXk6IGRlY2ltYWxfdGV4dCh2YWx1ZSkgZm9yIGtleSwgdmFsdWUgaW4gY29tcGFyaXNvbl9tZXRyaWNzLml0ZW1zKCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInZhcmlhbmNlIjoge2tleTogZGVjaW1hbF90ZXh0KHZhbHVlKSBmb3Iga2V5LCB2YWx1ZSBpbiB2YXJpYW5jZV9tZXRyaWNzLml0ZW1zKCl9LAogICAgICAgIH0sCiAgICB9CiAgICBmb3Iga2V5IGluICgiY29tcGFueSIsICJyZWFsbV9pZCIsICJzb3VyY2VfdXBkYXRlZF9hdCIpOgogICAgICAgIGlmIGtleSBpbiBwYXlsb2FkOgogICAgICAgICAgICByZXN1bHRba2V5XSA9IG9wdGlvbmFsX3RleHQocGF5bG9hZC5nZXQoa2V5KSwga2V5KQogICAgcmV0dXJuIHJlc3VsdAoKCmRlZiBtYWluKGFyZ3Y6IGxpc3Rbc3RyXSB8IE5vbmUgPSBOb25lKSAtPiBpbnQ6CiAgICByZXR1cm4gcnVuX2NsaSgKICAgICAgICBwcm9ncmFtPSJwbmxfc3VtbWFyeS5weSIsCiAgICAgICAgZGVzY3JpcHRpb249IkJ1aWxkIFAmTCBjb21wYXJpc29uIEpTT04gZnJvbSBub3JtYWxpemVkIFF1aWNrQm9va3MgbGVhZiByb3dzLiIsCiAgICAgICAgYnVpbGQ9YnVpbGRfcG5sX3N1bW1hcnksCiAgICAgICAgYXJndj1hcmd2LAogICAgKQoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICByYWlzZSBTeXN0ZW1FeGl0KG1haW4oKSkK","executable":false},{"filename":"skill.json","mimeType":"application/json","data":"ewogICJhdXRob3IiOiAicmVkZWVwIiwKICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKICAidmVyc2lvbiI6ICIxLjAuMiIsCiAgInNvdXJjZSI6ICJodHRwczovL3JlZGVlcC5hcHAvYWdlbnQtZGlyZWN0b3J5L2ZpbmFuY2lhbC1hY2NvdW50LW1hbmFnZXIiLAogICJob21lcGFnZSI6ICJodHRwczovL3JlZGVlcC5hcHAvYWdlbnQtZGlyZWN0b3J5L2ZpbmFuY2lhbC1hY2NvdW50LW1hbmFnZXIiLAogICJ0YWdzIjogWwogICAgInF1aWNrYm9va3MiLAogICAgInN0cmlwZSIsCiAgICAiZmluYW5jZSIsCiAgICAiYWNjb3VudHMtcmVjZWl2YWJsZSIsCiAgICAiZXhwZW5zZS1yZXZpZXciLAogICAgInByb2ZpdC1hbmQtbG9zcyIsCiAgICAiZ21haWwiCiAgXSwKICAiY3JlYXRlZEF0IjogIjIwMjYtMDgtMjYiLAogICJvcmlnaW4iOiAiY3VzdG9tIgp9Cg==","executable":false}]}],"tasks":[{"label":"Keep My Books Organized for Month-End","instruction":"Keep My Books Organized for Month-End. Close the month with cleaner books and fewer loose ends. Reconcile QuickBooks and Stripe, review overdue invoices and uncategorized expenses, and turn your P&L into an auditable workbook or deck. Confirm the scope and gather these inputs before starting: The exact QuickBooks company and Stripe account, plus close period, currency, timezone, and accounting method."}],"onboardingIntroduction":"Install Intuit's official local QuickBooks Online MCP as server id quickbooks; disable its write, update, and delete tool groups for review-only workflows.\nCreate an Intuit OAuth app, authorize the exact QuickBooks company, and verify sandbox versus production, realm id, timezone, currency, and accounting method.\nConnect Stripe's official hosted MCP at https://mcp.stripe.com as server id stripe, then authorize the matching account and verify live mode versus sandbox.\nOptional: bind Google Workspace for Gmail drafts; QuickBooks and Stripe remain required for the core reconciliation workflows."}
