{
  "schema_version": "tawigo.tawipost-source-offer/v1",
  "offer_id": "tawipost/v2.21.8-f8421ebce7bb0648",
  "product": "TawiPost",
  "integration_tier": "L2-modified",
  "license": "AGPL-3.0-only",
  "upstream": {
    "project": "Postiz",
    "version": "v2.21.8",
    "source_url": "https://github.com/gitroomhq/postiz-app/tree/9a7d9deafcf373c759e2ec7955206a2a31b003f3",
    "commit": "9a7d9deafcf373c759e2ec7955206a2a31b003f3",
    "image": "ghcr.io/gitroomhq/postiz-app:v2.21.8",
    "image_digest": "sha256:3ec7bc8ecf61f08c22e0954291702b097f944def515dc259cb3a441aba4046c0",
    "license_url": "https://raw.githubusercontent.com/gitroomhq/postiz-app/9a7d9deafcf373c759e2ec7955206a2a31b003f3/LICENSE"
  },
  "modification": {
    "description": "One hash-bound provider-specific authentication patch preserves GENERIC OIDC provisioning and denies LOCAL registration even when organization count is zero. A second hash-bound patch adds native Temporal client mTLS plus a minted RS256 JWT bearer token so the scheduler authenticates to the mutual-TLS/JWT Temporal frontend. A third hash-bound patch replaces the Postiz page-title ternary with the TawiPost literal in source and compiled .next/server bundles.",
    "input_sha256": "13405ccff967774e984d2f91f189a186022207ca1d6b8d504ac9e8f2cb0da5cc",
    "output_sha256": "f8421ebce7bb06483246d5692563c96167adbc57955f71f6521dd5acf9e9387a",
    "adr": "docs/adr/055-tawipost-l2-auth-hardening.md"
  },
  "public_base_url": "https://go.tawi.ai/oss/tawipost/v2.21.8-f8421ebce7bb0648",
  "source_request_url": "https://tawi.ai/support?topic=source-request",
  "legal_review": "Counsel/public-GA approval remains a separate required gate.",
  "artifacts": [
    {
      "kind": "source_transformer",
      "name": "patch_tawipost_auth.py",
      "repository_path": "scripts/ci/patch_tawipost_auth.py",
      "media_type": "text/x-python; charset=utf-8",
      "sha256": "e9bcdc6cea5a3a8f1babe5f4bc0455ce76c342ddc522cfb28d1c2a9cab3dbe49",
      "size": 3111,
      "route": "/oss/tawipost/v2.21.8-f8421ebce7bb0648/patch-e9bcdc6cea5a3a8f1babe5f4bc0455ce76c342ddc522cfb28d1c2a9cab3dbe49/patch_tawipost_auth.py",
      "content_base64": "IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJBcHBseSBUYXdpUG9zdCdzIHNpbmdsZSBoYXNoLWJvdW5kIFBvc3RpeiB2Mi4yMS44IGF1dGggaGFyZGVuaW5nIHBhdGNoLiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IG9zCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAppbXBvcnQgc3lzCmltcG9ydCB0ZW1wZmlsZQoKCkVYUEVDVEVEX0lOUFVUX1NIQTI1NiA9ICIxMzQwNWNjZmY5Njc3NzRlOTg0ZDJmOTFmMTg5YTE4NjAyMjIwN2NhMWQ2YjhkNTA0YWM5ZThmMmNiMGRhNWNjIgpFWFBFQ1RFRF9PVVRQVVRfU0hBMjU2ID0gImY4NDIxZWJjZTdiYjA2NDgzMjQ2ZDU2OTI1NjNjOTYxNjdhZGJjNTc5NTVmNzFmNjUyMWRkNWFjZjllOTM4N2EiClVQU1RSRUFNX0ZBTExCQUNLID0gIiAgICByZXR1cm4gKGF3YWl0IHRoaXMuX29yZ2FuaXphdGlvblNlcnZpY2UuZ2V0Q291bnQoKSkgPT09IDA7IgpIQVJERU5FRF9GQUxMQkFDSyA9ICIgICAgcmV0dXJuIGZhbHNlOyIKCgpjbGFzcyBQYXRjaEVycm9yKFJ1bnRpbWVFcnJvcik6CiAgICAiIiJSYWlzZWQgd2hlbiB0aGUgcGlubmVkIHVwc3RyZWFtIHNvdXJjZSBpcyBub3QgZXhhY3RseSB3aGF0IHdhcyByZXZpZXdlZC4iIiIKCgpkZWYgc2hhMjU2X3RleHQoc291cmNlOiBzdHIpIC0+IHN0cjoKICAgIHJldHVybiBoYXNobGliLnNoYTI1Nihzb3VyY2UuZW5jb2RlKCJ1dGYtOCIpKS5oZXhkaWdlc3QoKQoKCmRlZiByZXBsYWNlX3JlZ2lzdHJhdGlvbl9mYWxsYmFjayhzb3VyY2U6IHN0cikgLT4gc3RyOgogICAgb2NjdXJyZW5jZXMgPSBzb3VyY2UuY291bnQoVVBTVFJFQU1fRkFMTEJBQ0spCiAgICBpZiBvY2N1cnJlbmNlcyAhPSAxOgogICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoCiAgICAgICAgICAgICJleHBlY3RlZCBleGFjdGx5IG9uZSBQb3N0aXogTE9DQUwtcmVnaXN0cmF0aW9uIGZhbGxiYWNrOyAiCiAgICAgICAgICAgIGYiZm91bmQge29jY3VycmVuY2VzfSIKICAgICAgICApCiAgICByZXR1cm4gc291cmNlLnJlcGxhY2UoVVBTVFJFQU1fRkFMTEJBQ0ssIEhBUkRFTkVEX0ZBTExCQUNLLCAxKQoKCmRlZiBoYXJkZW5fYXV0aF9zb3VyY2Uoc291cmNlOiBzdHIpIC0+IHN0cjoKICAgIGlucHV0X3NoYTI1NiA9IHNoYTI1Nl90ZXh0KHNvdXJjZSkKICAgIGlmIGlucHV0X3NoYTI1NiAhPSBFWFBFQ1RFRF9JTlBVVF9TSEEyNTY6CiAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcigKICAgICAgICAgICAgInJlZnVzaW5nIHVua25vd24gUG9zdGl6IGF1dGggc291cmNlOiBpbnB1dCBTSEEtMjU2ICIKICAgICAgICAgICAgZiJ7aW5wdXRfc2hhMjU2fSwgZXhwZWN0ZWQge0VYUEVDVEVEX0lOUFVUX1NIQTI1Nn0iCiAgICAgICAgKQoKICAgIHBhdGNoZWQgPSByZXBsYWNlX3JlZ2lzdHJhdGlvbl9mYWxsYmFjayhzb3VyY2UpCiAgICBvdXRwdXRfc2hhMjU2ID0gc2hhMjU2X3RleHQocGF0Y2hlZCkKICAgIGlmIG91dHB1dF9zaGEyNTYgIT0gRVhQRUNURURfT1VUUFVUX1NIQTI1NjoKICAgICAgICByYWlzZSBQYXRjaEVycm9yKAogICAgICAgICAgICAicGF0Y2hlZCBQb3N0aXogYXV0aCBzb3VyY2UgU0hBLTI1NiBtaXNtYXRjaDogIgogICAgICAgICAgICBmIntvdXRwdXRfc2hhMjU2fSwgZXhwZWN0ZWQge0VYUEVDVEVEX09VVFBVVF9TSEEyNTZ9IgogICAgICAgICkKICAgIHJldHVybiBwYXRjaGVkCgoKZGVmIHdyaXRlX3RleHRfYXRvbWljKHRhcmdldDogUGF0aCwgY29udGVudDogc3RyKSAtPiBOb25lOgogICAgIiIiUmVwbGFjZSB0YXJnZXQgb25seSBhZnRlciB0aGUgY29tcGxldGUgdmFsaWRhdGVkIG91dHB1dCBpcyBkdXJhYmxlLiIiIgogICAgdGVtcG9yYXJ5OiBQYXRoIHwgTm9uZSA9IE5vbmUKICAgIHRyeToKICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgKICAgICAgICAgICAgbW9kZT0idyIsCiAgICAgICAgICAgIGVuY29kaW5nPSJ1dGYtOCIsCiAgICAgICAgICAgIG5ld2xpbmU9IiIsCiAgICAgICAgICAgIGRpcj10YXJnZXQucGFyZW50LAogICAgICAgICAgICBwcmVmaXg9ZiIue3RhcmdldC5uYW1lfS4iLAogICAgICAgICAgICBkZWxldGU9RmFsc2UsCiAgICAgICAgKSBhcyBoYW5kbGU6CiAgICAgICAgICAgIHRlbXBvcmFyeSA9IFBhdGgoaGFuZGxlLm5hbWUpCiAgICAgICAgICAgIGhhbmRsZS53cml0ZShjb250ZW50KQogICAgICAgICAgICBoYW5kbGUuZmx1c2goKQogICAgICAgICAgICBvcy5mc3luYyhoYW5kbGUuZmlsZW5vKCkpCiAgICAgICAgb3MuY2htb2QodGVtcG9yYXJ5LCB0YXJnZXQuc3RhdCgpLnN0X21vZGUpCiAgICAgICAgb3MucmVwbGFjZSh0ZW1wb3JhcnksIHRhcmdldCkKICAgICAgICB0ZW1wb3JhcnkgPSBOb25lCiAgICBmaW5hbGx5OgogICAgICAgIGlmIHRlbXBvcmFyeSBpcyBub3QgTm9uZToKICAgICAgICAgICAgdGVtcG9yYXJ5LnVubGluayhtaXNzaW5nX29rPVRydWUpCgoKZGVmIG1haW4oYXJndjogbGlzdFtzdHJdKSAtPiBpbnQ6CiAgICBpZiBsZW4oYXJndikgIT0gMjoKICAgICAgICBwcmludChmInVzYWdlOiB7YXJndlswXX0gPGF1dGguc2VydmljZS50cz4iLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgcmV0dXJuIDIKCiAgICB0YXJnZXQgPSBQYXRoKGFyZ3ZbMV0pCiAgICB0cnk6CiAgICAgICAgc291cmNlID0gdGFyZ2V0LnJlYWRfdGV4dChlbmNvZGluZz0idXRmLTgiKQogICAgICAgIHBhdGNoZWQgPSBoYXJkZW5fYXV0aF9zb3VyY2Uoc291cmNlKQogICAgICAgIHdyaXRlX3RleHRfYXRvbWljKHRhcmdldCwgcGF0Y2hlZCkKICAgIGV4Y2VwdCAoT1NFcnJvciwgVW5pY29kZUVycm9yLCBQYXRjaEVycm9yKSBhcyBleGM6CiAgICAgICAgcHJpbnQoZiJFUlJPUjoge2V4Y30iLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgcmV0dXJuIDEKICAgIHByaW50KAogICAgICAgICJoYXJkZW5lZCBQb3N0aXogYXV0aCBzb3VyY2UgIgogICAgICAgIGYie0VYUEVDVEVEX0lOUFVUX1NIQTI1Nn0gLT4ge0VYUEVDVEVEX09VVFBVVF9TSEEyNTZ9IgogICAgKQogICAgcmV0dXJuIDAKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgcmFpc2UgU3lzdGVtRXhpdChtYWluKHN5cy5hcmd2KSkK"
    },
    {
      "kind": "source_transformer_temporal",
      "name": "patch_tawipost_temporal_mtls.py",
      "repository_path": "scripts/ci/patch_tawipost_temporal_mtls.py",
      "media_type": "text/x-python; charset=utf-8",
      "sha256": "69d7f830078e2005a692e66e6e906740c558a549356fc1e6624e2c88d5e79938",
      "size": 9681,
      "route": "/oss/tawipost/v2.21.8-f8421ebce7bb0648/patch-temporal-69d7f830078e2005a692e66e6e906740c558a549356fc1e6624e2c88d5e79938/patch_tawipost_temporal_mtls.py",
      "content_base64": "IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJHaXZlIFRhd2lQb3N0J3MgUG9zdGl6IGVuZ2luZSBuYXRpdmUgVGVtcG9yYWwgY2xpZW50LWNlcnRpZmljYXRlIG1UTFMuCgpXaHkgdGhpcyBwYXRjaCBleGlzdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRoZSB0MCBUZW1wb3JhbCBmcm9udGVuZCBlbmZvcmNlcyBgYHJlcXVpcmVDbGllbnRBdXRoOiB0cnVlYGAgKG11dHVhbCBUTFMpLgpVcHN0cmVhbSBQb3N0aXogdjIuMjEuOCBjYW4gb25seSBzcGVhayAqc2VydmVyKi1UTFMgdG8gVGVtcG9yYWwg4oCUIGl0cwpgYEB0ZW1wb3JhbGlvL2NsaWVudGBgIGNvbm5lY3Rpb24gaXMgYnVpbHQgYXMgYGB7IHRsczogdHJ1ZSB9YGAgd2l0aCBubyB3YXkgdG8KcHJlc2VudCBhIGNsaWVudCBjZXJ0aWZpY2F0ZSAoc2VlIGBgdGVtcG9yYWwubW9kdWxlLnRzYGAgLwpgYGhlYWx0aC5jb250cm9sbGVyLnRzYGApLiBUaGUgcHJldmlvdXMgZGVwbG95IHRyaWVkIHRvIGJyaWRnZSB0aGUgZ2FwIHdpdGggYQpnaG9zdHVubmVsIGNsaWVudC1tb2RlIHNpZGVjYXIsIGJ1dCBnaG9zdHVubmVsIGlzIGEgcmF3IGJ5dGUgVExTIHByb3h5OiBpdCBkb2VzCk5PVCBuZWdvdGlhdGUgQUxQTiBgYGgyYGAgb24gdGhlIHVwc3RyZWFtIGNvbm5lY3Rpb24sIHNvIFRlbXBvcmFsJ3MgZ1JQQy9IVFRQMgpzZXJ2ZXIgcmVqZWN0cyB0aGUgc3RyZWFtIChvYnNlcnZlZDogVExTIGhhbmRzaGFrZSBzdWNjZWVkcywgMzkgcHJlZmFjZSBieXRlcwpmb3J3YXJkZWQsIFRlbXBvcmFsIHJldHVybnMgMCBieXRlcyBhbmQgY2xvc2VzKS4gUmVzdWx0OiBQb3N0aXoncwpgYC9oZWFsdGgvc3RhdHVzYGAgKHdoaWNoIGNhbGxzIGBgQ29ubmVjdGlvbi5jb25uZWN0YGAgKyBgYGRlc2NyaWJlTmFtZXNwYWNlYGApCmZhaWxzLCB0aGUgc3RhcnR1cCBwcm9iZSBuZXZlciBwYXNzZXMsIGFuZCB0aGUgcG9kIGNyYXNoLWxvb3BzLgoKVGhlIFNPVEEgLyBvZmZpY2lhbCBUZW1wb3JhbCBwYXR0ZXJuIGlzIG5hdGl2ZSBTREsgbVRMUzogdGhlIGNsaWVudCBwcmVzZW50cyBpdHMKb3duIGNlcnRpZmljYXRlIHZpYSBgYFRMU0NvbmZpZy5jbGllbnRDZXJ0UGFpcmBgIChUZW1wb3JhbCBkb2NzLCAiQ2xpZW50CmNlcnRpZmljYXRlICYga2V5IikuIFRoaXMgcGF0Y2ggcmV3cml0ZXMgdGhlIHR3byBgYHsgdGxzOiB0cnVlIH1gYCBzaXRlcyBzbyB0aGF0LAp3aGVuIHRoZSBjbGllbnQtY2VydCBlbnYgdmFycyBhcmUgcHJlc2VudCwgdGhlIGNvbm5lY3Rpb24gaXMgYnVpbHQgd2l0aCBhIGZ1bGwKYGBUTFNDb25maWdgYCByZWFkIGZyb20gdGhlIG1vdW50ZWQgYGB0ZW1wb3JhbC1zZGstY2xpZW50LXRsc2BgIHNlY3JldC4gSXQgc3RheXMKYmFja3dhcmQgY29tcGF0aWJsZTogd2l0aCBubyBjZXJ0IHBhdGhzIHNldCBpdCBmYWxscyBiYWNrIHRvIGBgdHJ1ZWBgIChwbGFpbgpzZXJ2ZXItVExTKSwgZXhhY3RseSB0aGUgdXBzdHJlYW0gYmVoYXZpb3VyLgoKRW52IGNvbnRyYWN0IChzZXQgaW4gZGVwbG95L2s4cy90YXdpcG9zdC55YW1sKToKICAgIFRFTVBPUkFMX1RMUz10cnVlCiAgICBURU1QT1JBTF9UTFNfQ0xJRU5UX0NFUlRfUEFUSD0vdGVtcG9yYWwtdGxzL3Rscy5jcnQKICAgIFRFTVBPUkFMX1RMU19DTElFTlRfS0VZX1BBVEg9L3RlbXBvcmFsLXRscy90bHMua2V5CiAgICBURU1QT1JBTF9UTFNfU0VSVkVSX0NBX1BBVEg9L3RlbXBvcmFsLXRscy9jYS5jcnQKICAgIFRFTVBPUkFMX1RMU19TRVJWRVJfTkFNRT10ZW1wb3JhbC1mcm9udGVuZC50YXdpZ28uc3ZjLmNsdXN0ZXIubG9jYWwKClR5cGUgc2FmZXR5OiB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBwaW5uZWQgaW1hZ2Ug4oCUCiAgKiBAdGVtcG9yYWxpby9jbGllbnQgQ29ubmVjdGlvbk9wdGlvbnMudGxzOiBUTFNDb25maWcgfCBib29sZWFuIHwgbnVsbAogICogbmVzdGpzLXRlbXBvcmFsLWNvcmUgY29ubmVjdGlvbi50bHM6IGJvb2xlYW4gfCBUTFNDb25maWcKICAqIFRMU0NvbmZpZyA9IHsgc2VydmVyTmFtZU92ZXJyaWRlPzsgc2VydmVyUm9vdENBQ2VydGlmaWNhdGU/OiBVaW50OEFycmF5OwogICAgICAgICAgICAgICAgICBjbGllbnRDZXJ0UGFpcj86IHsgY3J0OiBVaW50OEFycmF5OyBrZXk6IFVpbnQ4QXJyYXkgfSB9CiAgICAoZnMucmVhZEZpbGVTeW5jKHBhdGgpIC0+IEJ1ZmZlciwgd2hpY2ggaXMgYSBVaW50OEFycmF5KS4KClRoZSBpbmplY3RlZCB2YWx1ZSBpcyBhIHNlbGYtY29udGFpbmVkIElJRkUg4oCUIG5vIG5ldyBpbXBvcnRzLCBDb21tb25KUwpgYHJlcXVpcmUoJ2ZzJylgYCAodGhlIG9yY2hlc3RyYXRvci9iYWNrZW5kIGRpc3QgaXMgQ29tbW9uSlMpLCByZXR1cm5zCmBgVExTQ29uZmlnIHwgdHJ1ZWBgLgoKVGhpcyBmb2xsb3dzIHRoZSBBRFItMDU1IGhhc2gtYm91bmQgc2luZ2xlLXBhdGNoIGRpc2NpcGxpbmU6IHRoZSBleGFjdCB1cHN0cmVhbQp0b2tlbiBtdXN0IGFwcGVhciBleGFjdGx5IG9uY2UgcGVyIGZpbGUsIG9yIHRoZSBidWlsZCBmYWlscyBjbG9zZWQuCiIiIgoKZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhbm5vdGF0aW9ucwoKaW1wb3J0IHN5cwpmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKCgpjbGFzcyBQYXRjaEVycm9yKFJ1bnRpbWVFcnJvcik6CiAgICAiIiJSYWlzZWQgd2hlbiB0aGUgcGlubmVkIHVwc3RyZWFtIHNvdXJjZSBpcyBub3QgZXhhY3RseSB3aGF0IHdhcyByZXZpZXdlZC4iIiIKCgojIFRoZSBleGFjdCB1cHN0cmVhbSB0b2tlbiAoYXBwZWFycyBvbmNlIGluIGVhY2ggdGFyZ2V0IGZpbGUpLiBCb3RoCiMgdGVtcG9yYWwubW9kdWxlLnRzICh7dGxzOiB0cnVlfSkgYW5kIGhlYWx0aC5jb250cm9sbGVyLnRzICh7IHRsczogdHJ1ZSB9KQojIGNvbnRhaW4gdGhlIGNhbm9uaWNhbCBpbm5lciB0b2tlbiBiZWxvdy4KVVBTVFJFQU1fVE9LRU4gPSAidGxzOiB0cnVlIgoKIyBTZWxmLWNvbnRhaW5lZCBUTFNDb25maWcgYnVpbGRlci4gS2VwdCBvbiBvbmUgbGluZSBzbyBpdCBkcm9wcyBjbGVhbmx5IGludG8KIyB0aGUgZXhpc3Rpbmcgb2JqZWN0LWxpdGVyYWwgcG9zaXRpb24gaW4gZWl0aGVyIGZpbGUgd2l0aG91dCBkaXN0dXJiaW5nIHRoZQojIHN1cnJvdW5kaW5nIHRlcm5hcnkvc3ByZWFkLiBSZXR1cm5zIGEgZnVsbCBtVExTIFRMU0NvbmZpZyB3aGVuIHRoZSBjbGllbnQKIyBjZXJ0L2tleSBwYXRocyBhcmUgcHJlc2VudCwgZWxzZSBgdHJ1ZWAgKHVwc3RyZWFtIHNlcnZlci1UTFMgYmVoYXZpb3VyKS4KX0lJRkUgPSAoCiAgICAiKCgpID0+IHsgIgogICAgImNvbnN0IGNwID0gcHJvY2Vzcy5lbnYuVEVNUE9SQUxfVExTX0NMSUVOVF9DRVJUX1BBVEg7ICIKICAgICJjb25zdCBrcCA9IHByb2Nlc3MuZW52LlRFTVBPUkFMX1RMU19DTElFTlRfS0VZX1BBVEg7ICIKICAgICJjb25zdCBjYSA9IHByb2Nlc3MuZW52LlRFTVBPUkFMX1RMU19TRVJWRVJfQ0FfUEFUSDsgIgogICAgImNvbnN0IHNuaSA9IHByb2Nlc3MuZW52LlRFTVBPUkFMX1RMU19TRVJWRVJfTkFNRTsgIgogICAgImlmIChjcCAmJiBrcCkgeyAiCiAgICAiY29uc3QgZnMgPSByZXF1aXJlKCdmcycpOyAiCiAgICAicmV0dXJuIHsgY2xpZW50Q2VydFBhaXI6IHsgY3J0OiBmcy5yZWFkRmlsZVN5bmMoY3ApLCBrZXk6IGZzLnJlYWRGaWxlU3luYyhrcCkgfSwgIgogICAgIi4uLihjYSA/IHsgc2VydmVyUm9vdENBQ2VydGlmaWNhdGU6IGZzLnJlYWRGaWxlU3luYyhjYSkgfSA6IHt9KSwgIgogICAgIi4uLihzbmkgPyB7IHNlcnZlck5hbWVPdmVycmlkZTogc25pIH0gOiB7fSkgfTsgIgogICAgIn0gIgogICAgInJldHVybiB0cnVlOyAiCiAgICAifSkoKSIKKQoKSEFSREVORURfVE9LRU4gPSBmInRsczoge19JSUZFfSIKCiMgLS0tIFBhcnQgMjogVGVtcG9yYWwgSldUIGJlYXJlciB0b2tlbiAoQVBJLWtleSkgbWludGluZyAtLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGUgdDAgVGVtcG9yYWwgZnJvbnRlbmQgcnVucyBKV1QgYXV0aG9yaXphdGlvbiAoYXV0aG9yaXplcjogZGVmYXVsdCArCiMgY2xhaW1NYXBwZXI6IGRlZmF1bHQgKyBqd3RLZXlQcm92aWRlcikuIEV2ZXJ5IFNESyBSUEMgbXVzdCBjYXJyeSBhIGJlYXJlcgojIHRva2VuIHdob3NlIGBwZXJtaXNzaW9uc2AgY2xhaW0gZ3JhbnRzIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlIHJvbGUsIHNpZ25lZAojIGJ5IHRoZSBUZW1wb3JhbCBzZXJ2aWNlIGtleSAocHVibGljIGhhbGYgcHVibGlzaGVkIGF0IHRoZSBnYXRld2F5IEpXS1MsCiMga2lkID0gaGV4KHNoYTI1NihQS0lYLURFUihwdWIpKVs6MTZdKSBwZXIgcGtnL2p3dGtleXMuS2V5SUQpLiBVcHN0cmVhbSBQb3N0aXoKIyBvbmx5IGZvcndhcmRzIGEgc3RhdGljIGBgVEVNUE9SQUxfQVBJX0tFWWBgIHN0cmluZzsgYSBzdGF0aWMgdG9rZW4gd291bGQKIyBleHBpcmUuIFRoaXMgcmV3cml0ZXMgdGhlIGFwaS1rZXkgdmFsdWUgdG8gYSBNSU5USU5HIEZVTkNUSU9OICh0aGUgU0RLJ3MKIyBgYGFwaUtleWBgIGFjY2VwdHMgYGAoKSA9PiBzdHJpbmdgYCkgdGhhdCBtaW50cyBhIGZyZXNoIHNob3J0LWxpdmVkIFJTMjU2IEpXVAojIHBlciBjYWxsIOKAlCBtaXJyb3JpbmcgcnVudGltZS90ZW1wb3JhbG1pc3Npb24vd29ya2VyLmdvCiMgKHBlcm1pc3Npb25zPVsiPG5zPjp3cml0ZSJdLCA1LW1pbiBUVEwsIDMwcyBjbG9jayBza2V3LCBraWQgaGVhZGVyKS4gVGhlIFJTQQojIGtleSArIGtpZCBhcmUgcGFyc2VkIG9uY2UgYW5kIGNhY2hlZCBvbiBnbG9iYWxUaGlzLiBXaXRoIG5vIHNpZ25pbmcga2V5IHBhdGgKIyBjb25maWd1cmVkIGl0IGZhbGxzIGJhY2sgdG8gdGhlIHJhdyBlbnYgc3RyaW5nICh1cHN0cmVhbSBiZWhhdmlvdXIpLgpVUFNUUkVBTV9BUElLRVkgPSAiYXBpS2V5OiBwcm9jZXNzLmVudi5URU1QT1JBTF9BUElfS0VZIgoKX01JTlRfRk4gPSAoCiAgICAiKCkgPT4geyAiCiAgICAiY29uc3Qga3AgPSBwcm9jZXNzLmVudi5URU1QT1JBTF9KV1RfUFJJVkFURV9LRVlfUEFUSDsgIgogICAgImlmICgha3ApIHsgcmV0dXJuIHByb2Nlc3MuZW52LlRFTVBPUkFMX0FQSV9LRVkgfHwgJyc7IH0gIgogICAgImNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7ICIKICAgICJpZiAoIWdsb2JhbFRoaXMuX190YXdpSnd0S2V5KSB7ICIKICAgICJjb25zdCBwcml2ID0gY3J5cHRvLmNyZWF0ZVByaXZhdGVLZXkoZnMucmVhZEZpbGVTeW5jKGtwKSk7ICIKICAgICJjb25zdCBkZXIgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHByaXYpLmV4cG9ydCh7IHR5cGU6ICdzcGtpJywgZm9ybWF0OiAnZGVyJyB9KTsgIgogICAgImNvbnN0IGtpZCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoZGVyKS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDMyKTsgIgogICAgImdsb2JhbFRoaXMuX190YXdpSnd0S2V5ID0geyBwcml2LCBraWQgfTsgIgogICAgIn0gIgogICAgImNvbnN0IHsgcHJpdiwga2lkIH0gPSBnbG9iYWxUaGlzLl9fdGF3aUp3dEtleTsgIgogICAgImNvbnN0IGIgPSAoeCkgPT4gQnVmZmVyLmZyb20oeCkudG9TdHJpbmcoJ2Jhc2U2NCcpLnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoLz0rJC8sICcnKTsgIgogICAgImNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApOyAiCiAgICAiY29uc3QgcGVybSA9IHByb2Nlc3MuZW52LlRFTVBPUkFMX0pXVF9QRVJNSVNTSU9OIHx8ICgocHJvY2Vzcy5lbnYuVEVNUE9SQUxfTkFNRVNQQUNFIHx8ICdkZWZhdWx0JykgKyAnOndyaXRlJyk7ICIKICAgICJjb25zdCBzdWIgPSBwcm9jZXNzLmVudi5URU1QT1JBTF9KV1RfU1VCSkVDVCB8fCAndGF3aXBvc3QnOyAiCiAgICAiY29uc3QgaGVhZCA9IHsgYWxnOiAnUlMyNTYnLCB0eXA6ICdKV1QnLCBraWQgfTsgIgogICAgImNvbnN0IGJvZHkgPSB7IHBlcm1pc3Npb25zOiBbcGVybV0sIHN1YiwgaWF0OiBub3csIG5iZjogbm93IC0gMzAsIGV4cDogbm93ICsgMzAwIH07ICIKICAgICJjb25zdCBzaSA9IGIoSlNPTi5zdHJpbmdpZnkoaGVhZCkpICsgJy4nICsgYihKU09OLnN0cmluZ2lmeShib2R5KSk7ICIKICAgICJyZXR1cm4gc2kgKyAnLicgKyBiKGNyeXB0by5zaWduKCdSU0EtU0hBMjU2JywgQnVmZmVyLmZyb20oc2kpLCBwcml2KSk7ICIKICAgICJ9IgopCgpIQVJERU5FRF9BUElLRVkgPSBmImFwaUtleToge19NSU5UX0ZOfSIKCiMgLS0tIFBhcnQgMzogd29ya2VyIGdyYWNlZnVsLWRlZ3JhZGUgKHRlbXBvcmFsLm1vZHVsZS50cyBvbmx5KSAtLS0tLS0tLS0tLS0KIyBuZXN0anMtdGVtcG9yYWwtY29yZSBzZXRzIGEgU1RBVElDIGBCZWFyZXIgJHthcGlLZXl9YCBtZXRhZGF0YSBoZWFkZXIKIyAoY29ubmVjdGlvbi5hcGlLZXkgaXMgdHlwZWQgc3RyaW5nLW9ubHkpIOKAlCBpdCBjYW5ub3QgY29uc3VtZSBhIHBlci1jYWxsCiMgbWludGluZyBmdW5jdGlvbiwgc28gdGhlIGR1cmFibGUtbWlzc2lvbiBXT1JLRVIgKGdldFRlbXBvcmFsTW9kdWxlKHRydWUpKQojIGNhbm5vdCBwcmVzZW50IHRoZSBzaG9ydC1saXZlZCBSUzI1NiB0b2tlbnMgdGhlIGZyb250ZW5kIHJlcXVpcmVzLiBSYXRoZXIKIyB0aGFuIHNoaXAgYSBsb25nLWxpdmVkIHN0YXRpYyBjcmVkZW50aWFsLCB0aGUgd29ya2VyIGlzIGFsbG93ZWQgdG8gZmFpbCBpdHMKIyBUZW1wb3JhbCBjb25uZWN0aW9uIGdyYWNlZnVsbHkgKGFsbG93Q29ubmVjdGlvbkZhaWx1cmUpIHNvIHRoZSBvcmNoZXN0cmF0b3IKIyBzdGlsbCBib290cyBhbmQgc2VydmVzIC9oZWFsdGgvc3RhdHVzLiBUaGUgaGVhbHRoIHByb2JlIGl0c2VsZiBET0VTIHZlcmlmeQojIFRlbXBvcmFsIChuYXRpdmUgQHRlbXBvcmFsaW8gbdCiTFMgKyBtaW50ZWQgSldUIGluIGhlYWx0aC5jb250cm9sbGVyLnRzKSwgc28KIyByZWFkaW5lc3Mgc3RpbGwgcHJvdmVzIHRoZSBtVExTK0pXVCBwYXRoIHdvcmtzOyBkdXJhYmxlLW1pc3Npb24gd29ya2VyCiMgc2NoZWR1bGluZyBpcyB0aGUgZG9jdW1lbnRlZCBwb3N0LWxhdW5jaCBidWlsZG91dCAoUkVNRURJQVRJT05fU1RBVEUuanNvbikuClVQU1RSRUFNX0lTR0xPQkFMID0gImlzR2xvYmFsOiB0cnVlLCIKSEFSREVORURfSVNHTE9CQUwgPSAiaXNHbG9iYWw6IHRydWUsXG4gICAgYWxsb3dDb25uZWN0aW9uRmFpbHVyZTogdHJ1ZSwiCgoKZGVmIF9yZXBsYWNlX29uY2Uoc291cmNlOiBzdHIsIG5lZWRsZTogc3RyLCByZXBsYWNlbWVudDogc3RyLCBsYWJlbDogc3RyKSAtPiBzdHI6CiAgICBvY2N1cnJlbmNlcyA9IHNvdXJjZS5jb3VudChuZWVkbGUpCiAgICBpZiBvY2N1cnJlbmNlcyAhPSAxOgogICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoCiAgICAgICAgICAgIGYiZXhwZWN0ZWQgZXhhY3RseSBvbmUgdXBzdHJlYW0ge2xhYmVsfSBzaXRlOyBmb3VuZCB7b2NjdXJyZW5jZXN9IgogICAgICAgICkKICAgIGlmIHJlcGxhY2VtZW50IGluIHNvdXJjZToKICAgICAgICByYWlzZSBQYXRjaEVycm9yKGYic291cmNlIGFscmVhZHkgcGF0Y2hlZCBmb3Ige2xhYmVsfSIpCiAgICByZXR1cm4gc291cmNlLnJlcGxhY2UobmVlZGxlLCByZXBsYWNlbWVudCwgMSkKCgpkZWYgaGFyZGVuX3RlbXBvcmFsKHNvdXJjZTogc3RyLCAqLCBtaW50X2FwaWtleTogYm9vbCwgYWxsb3dfZmFpbHVyZTogYm9vbCkgLT4gc3RyOgogICAgIyBOYXRpdmUgbVRMUyBjbGllbnQgY2VydCBhcHBsaWVzIHRvIGV2ZXJ5IFRlbXBvcmFsIGNvbm5lY3Rpb24gc2l0ZS4KICAgIHBhdGNoZWQgPSBfcmVwbGFjZV9vbmNlKHNvdXJjZSwgVVBTVFJFQU1fVE9LRU4sIEhBUkRFTkVEX1RPS0VOLCAiVGVtcG9yYWwgYHRsczogdHJ1ZWAiKQogICAgaWYgbWludF9hcGlrZXk6CiAgICAgICAgIyBoZWFsdGguY29udHJvbGxlci50cyB0YWxrcyB0byBAdGVtcG9yYWxpbyBkaXJlY3RseSAoYXBpS2V5IGFjY2VwdHMgYQogICAgICAgICMgZnVuY3Rpb24pIOKAlCBtaW50IGEgZnJlc2ggUlMyNTYgYmVhcmVyIHRva2VuIHBlciBjYWxsLgogICAgICAgIHBhdGNoZWQgPSBfcmVwbGFjZV9vbmNlKAogICAgICAgICAgICBwYXRjaGVkLCBVUFNUUkVBTV9BUElLRVksIEhBUkRFTkVEX0FQSUtFWSwgIlRlbXBvcmFsIGBhcGlLZXlgIGVudiIKICAgICAgICApCiAgICBpZiBhbGxvd19mYWlsdXJlOgogICAgICAgICMgdGVtcG9yYWwubW9kdWxlLnRzIChuZXN0anMtdGVtcG9yYWwtY29yZSkg4oCUIHRvbGVyYXRlIHdvcmtlciBjb25uZWN0CiAgICAgICAgIyBmYWlsdXJlIHNvIHRoZSBvcmNoZXN0cmF0b3IgYm9vdHMgd2l0aG91dCBhIHN0YXRpYyBjcmVkZW50aWFsLgogICAgICAgIHBhdGNoZWQgPSBfcmVwbGFjZV9vbmNlKAogICAgICAgICAgICBwYXRjaGVkLCBVUFNUUkVBTV9JU0dMT0JBTCwgSEFSREVORURfSVNHTE9CQUwsICJUZW1wb3JhbCBtb2R1bGUgYGlzR2xvYmFsYCIKICAgICAgICApCiAgICByZXR1cm4gcGF0Y2hlZAoKCmRlZiBwYXRjaF9maWxlKHBhdGg6IFBhdGgpIC0+IE5vbmU6CiAgICBiYXNlID0gcGF0aC5uYW1lCiAgICBpZiBiYXNlID09ICJoZWFsdGguY29udHJvbGxlci50cyI6CiAgICAgICAgbWludF9hcGlrZXksIGFsbG93X2ZhaWx1cmUgPSBUcnVlLCBGYWxzZQogICAgZWxpZiBiYXNlID09ICJ0ZW1wb3JhbC5tb2R1bGUudHMiOgogICAgICAgIG1pbnRfYXBpa2V5LCBhbGxvd19mYWlsdXJlID0gRmFsc2UsIFRydWUKICAgIGVsc2U6CiAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcihmInVuZXhwZWN0ZWQgVGVtcG9yYWwgcGF0Y2ggdGFyZ2V0OiB7YmFzZX0iKQogICAgb3JpZ2luYWwgPSBwYXRoLnJlYWRfdGV4dChlbmNvZGluZz0idXRmLTgiKQogICAgcGF0Y2hlZCA9IGhhcmRlbl90ZW1wb3JhbCgKICAgICAgICBvcmlnaW5hbCwgbWludF9hcGlrZXk9bWludF9hcGlrZXksIGFsbG93X2ZhaWx1cmU9YWxsb3dfZmFpbHVyZQogICAgKQogICAgaWYgcGF0Y2hlZCA9PSBvcmlnaW5hbDoKICAgICAgICByYWlzZSBQYXRjaEVycm9yKGYibm8gY2hhbmdlIGFwcGxpZWQgdG8ge3BhdGh9IikKICAgIHBhdGgud3JpdGVfdGV4dChwYXRjaGVkLCBlbmNvZGluZz0idXRmLTgiKQogICAgcHJpbnQoZiJwYXRjaGVkIFRlbXBvcmFsIG1UTFMgKHtiYXNlfSk6IG1pbnRfYXBpa2V5PXttaW50X2FwaWtleX0gYWxsb3dfZmFpbHVyZT17YWxsb3dfZmFpbHVyZX0iKQoKCmRlZiBtYWluKGFyZ3Y6IGxpc3Rbc3RyXSkgLT4gaW50OgogICAgZmlsZXMgPSBhcmd2WzE6XQogICAgaWYgbm90IGZpbGVzOgogICAgICAgIHByaW50KCJ1c2FnZTogcGF0Y2hfdGF3aXBvc3RfdGVtcG9yYWxfbXRscy5weSA8ZmlsZS50cz4gWzxmaWxlLnRzPiAuLi5dIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAyCiAgICBmb3IgcmF3IGluIGZpbGVzOgogICAgICAgIHBhdGggPSBQYXRoKHJhdykKICAgICAgICBpZiBub3QgcGF0aC5pc19maWxlKCk6CiAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoZiJ0YXJnZXQgc291cmNlIG5vdCBmb3VuZDoge3BhdGh9IikKICAgICAgICBwYXRjaF9maWxlKHBhdGgpCiAgICByZXR1cm4gMAoKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICB0cnk6CiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChtYWluKHN5cy5hcmd2KSkKICAgIGV4Y2VwdCBQYXRjaEVycm9yIGFzIGV4YzoKICAgICAgICBwcmludChmInBhdGNoX3Rhd2lwb3N0X3RlbXBvcmFsX210bHM6IHtleGN9IiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMSkK"
    },
    {
      "kind": "source_transformer_branding",
      "name": "patch_tawipost_branding.py",
      "repository_path": "scripts/ci/patch_tawipost_branding.py",
      "media_type": "text/x-python; charset=utf-8",
      "sha256": "96d0b4f7cf36e6d8e377fa904fecd4d3f77f7aa87d174ae4afc44b42dfa8c722",
      "size": 6317,
      "route": "/oss/tawipost/v2.21.8-f8421ebce7bb0648/patch-branding-96d0b4f7cf36e6d8e377fa904fecd4d3f77f7aa87d174ae4afc44b42dfa8c722/patch_tawipost_branding.py",
      "content_base64": "IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoiIiJSZWJyYW5kIFRhd2lQb3N0J3MgdXNlci1mYWNpbmcgcGFnZSB0aXRsZXMgYXQgaW1hZ2UgYnVpbGQgKG5vIHVwc3RyZWFtIGZvcmspLgoKV2h5IHRoaXMgcGF0Y2ggZXhpc3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGUgdXBzdHJlYW0gUG9zdGl6IGZyb250ZW5kIGNvbXB1dGVzIGV2ZXJ5IHBhZ2UgYGBtZXRhZGF0YS50aXRsZWBgIGF0IHJlcXVlc3QKdGltZSBmcm9tIHRoZSBleGFjdCB0ZXJuYXJ5IGV4cHJlc3Npb246OgoKICAgIGlzR2VuZXJhbFNlcnZlclNpZGUoKSA/ICdQb3N0aXonIDogJ0dpdHJvb20nCgoodHdvIG9mIHRoZSAxNCBwYWdlcyBsaW5lLXdyYXAgdGhlIHN1cnJvdW5kaW5nIGBgJHsuLi59YGAgaW50ZXJwb2xhdGlvbiwgc28KdGhlIGJhcmUgZXhwcmVzc2lvbiDigJQgbm90IHRoZSBpbnRlcnBvbGF0aW9uIOKAlCBpcyB0aGUgc3RhYmxlIHNpbmdsZS1saW5lCnRva2VuOyByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbGl0ZXJhbCBgYCdUYXdpUG9zdCdgYCBsZWF2ZXMgYGAkeydUYXdpUG9zdCd9YGAsCndoaWNoIGV2YWx1YXRlcyBpZGVudGljYWxseSkuCgpgYGlzR2VuZXJhbFNlcnZlclNpZGUgPSAoKSA9PiAhIXByb2Nlc3MuZW52LklTX0dFTkVSQUxgYCBpcyBhIHJ1bnRpbWUgZW52CmNoZWNrLCBzbyB0aGUgcHJvZHVjdCBuYW1lIGlzIG5laXRoZXIgYmFrZWQgYXMgYSBwbGFpbiBzdHJpbmcgbm9yIG92ZXJyaWRhYmxlCmJ5IGFueSBicmFuZGluZyBlbnYuIFRhd2lQb3N0IGlzIHRoZSBjbGllbnQtZmFjaW5nIHByb2R1Y3QgbmFtZSAoc2FtZQpvbi10aGUtZmx5IHJlc2tpbiBjb250cmFjdCBhcyBUYXdpT2ZmaWNlOiB3cmFwcGVycy9sYWJlbHMvYnVpbGQtdGltZSBwYXRjaGVzCm9ubHksIHRoZSB1cHN0cmVhbSBlbmdpbmUgc3RheXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHdpdGggYXR0cmlidXRpb24pLgpMaXZlIGV2aWRlbmNlIDIwMjYtMDctMjE6IGBgaHR0cHM6Ly9wb3N0LnRhd2kuYWkvYXV0aGBgIHNlcnZlZApgYDx0aXRsZT5Qb3N0aXogUmVnaXN0ZXI8L3RpdGxlPmBgLgoKVGhpcyByZXdyaXRlcyB0aGF0IGV4YWN0IHRlcm5hcnkgdG9rZW4gdG8gdGhlIGxpdGVyYWwgYGAnVGF3aVBvc3QnYGAgYWNyb3NzCmBgYXBwcy9mcm9udGVuZC9zcmNgYC4gQmVjYXVzZSB0aGUgdG9rZW4gaXMgdGhlIHRpdGxlLXRlbXBsYXRlIGlkaW9tLCB0aGUKcmVwbGFjZW1lbnQgaXMgaW5oZXJlbnRseSBzY29wZWQgdG8gcGFnZS10aXRsZSBtZXRhZGF0YSDigJQgbm8gbG9naWMsIGltcG9ydHMsCm9yIG5vbi10aXRsZSBzdHJpbmdzIGFyZSB0b3VjaGVkLgoKQURSLTA1NSBkaXNjaXBsaW5lIChoYXNoLWJvdW5kIHNpbmdsZS1wYXRjaCwgZmFpbCBjbG9zZWQpOiB0aGUgdG9rZW4gbXVzdApvY2N1ciBleGFjdGx5IEVYUEVDVEVEX09DQ1VSUkVOQ0VTIHRpbWVzIGFjcm9zcyBleGFjdGx5IEVYUEVDVEVEX0ZJTEVTIGZpbGVzCihjb3VudGVkIGFnYWluc3QgdGhlIHBpbm5lZCB1cHN0cmVhbSBlbmdpbmUsIFBvc3RpeiB2Mi4yMS44KS4gQW55IGRyaWZ0IOKAlAp1cHN0cmVhbSBidW1wLCByZWZhY3RvciwgcGFydGlhbCBwcmlvciBwYXRjaCDigJQgZmFpbHMgdGhlIGltYWdlIGJ1aWxkIGZvcgpkZWxpYmVyYXRlIHJlLXJldmlldyBpbnN0ZWFkIG9mIHNpbGVudGx5IG1pcy1icmFuZGluZy4KClRoZSBEb2NrZXJmaWxlIG11c3QgcmVidWlsZCB0aGUgZnJvbnRlbmQgYWZ0ZXJ3YXJkcyAoYGBuZXh0IHN0YXJ0YGAgc2VydmVzCnRoZSBwcmVidWlsdCBgYC5uZXh0YGA7IGEgc291cmNlLW9ubHkgcGF0Y2ggd291bGQgYmUgaW5lcnQpIGFuZCBhc3NlcnRzIHRoZQpjb21waWxlZCBvdXRwdXQgY29udGFpbnMgdGhlIG5ldyBsaXRlcmFsLgoiIiIKCmZyb20gX19mdXR1cmVfXyBpbXBvcnQgYW5ub3RhdGlvbnMKCmltcG9ydCByZQppbXBvcnQgc3lzCmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKVVBTVFJFQU1fVE9LRU4gPSAiaXNHZW5lcmFsU2VydmVyU2lkZSgpID8gJ1Bvc3RpeicgOiAnR2l0cm9vbSciClJFUExBQ0VNRU5UID0gIidUYXdpUG9zdCciCgojIFBpbm5lZCBhZ2FpbnN0IHRoZSBQb3N0aXogdjIuMjEuOCBlbmdpbmUgKDE0IG1ldGFkYXRhLnRpdGxlIHNpdGVzKS4KRVhQRUNURURfT0NDVVJSRU5DRVMgPSAxNApFWFBFQ1RFRF9GSUxFUyA9IDE0CiMgVGhlIHBhZ2UgdGhhdCBwcm9kdWNlZCB0aGUgbGl2ZSBtaXMtYnJhbmRpbmcgZXZpZGVuY2UgbXVzdCBiZSBhbW9uZyB0aGVtLgpSRVFVSVJFRF9TVUZGSVggPSAic3JjL2FwcC8oYXBwKS9hdXRoL3BhZ2UudHN4IgoKIyBUaGUgY29tcGlsZWQgLm5leHQvc2VydmVyIG91dHB1dCBjb250YWlucyB0aGUgcGFnZSB0aXRsZXMgYXMgY29tcHV0ZWQKIyB0ZXJuYXJ5IGV4cHJlc3Npb25zLiAgTmV4dC5qcyAxNiB3aXRoIFR1cmJvcGFjayBjb21waWxlcyAgbWV0YWRhdGEudGl0bGUKIyB0byByb3VnaGx5ICBgKDAsWC5pc0dlbmVyYWxTZXJ2ZXJTaWRlKSgpPyJQb3N0aXoiOiJHaXRyb29tImAgIGluc2lkZQojIHRlbXBsYXRlIGxpdGVyYWxzIGluIHRoZSBzZXJ2ZXItY2h1bmsgSlMuICBCZWNhdXNlIGBuZXh0IHN0YXJ0YCBzZXJ2ZXMKIyBmcm9tIHRoZSBwcmVidWlsdCAubmV4dCAod2UgY2Fubm90IHJ1biBgbmV4dCBidWlsZGAgaW5zaWRlIEthbmlrbyDigJQgaXQKIyBkb3dubG9hZHMgR29vZ2xlIEZvbnRzIGR1cmluZyBjb21waWxhdGlvbiBhbmQgZmFpbHMpLCB3ZSBwYXRjaCB0aGUKIyBjb21waWxlZCBvdXRwdXQgZGlyZWN0bHksIHJlcGxhY2luZyB0aGUgdGVybmFyeSB3aXRoIHRoZSBsaXRlcmFsCiMgIlRhd2lQb3N0Ii4KQ01QX1RJVExFX1JFID0gcmUuY29tcGlsZSgKICAgIHInXCgwLFx3K1wuaXNHZW5lcmFsU2VydmVyU2lkZVwpXChcKVxzKlw/XHMqIlBvc3RpelteIl0qIlxzKjpccyoiW14iXSoiJwopCgoKY2xhc3MgUGF0Y2hFcnJvcihSdW50aW1lRXJyb3IpOgogICAgIiIiUmFpc2VkIHdoZW4gdGhlIHBpbm5lZCB1cHN0cmVhbSBzb3VyY2UgaXMgbm90IGV4YWN0bHkgd2hhdCB3YXMgcmV2aWV3ZWQuIiIiCgoKZGVmIHBhdGNoX3NyYyhmcm9udGVuZF9kaXI6IFBhdGgpIC0+IGxpc3RbUGF0aF06CiAgICAiIiJQYXRjaCBUYXdpUG9zdCB0aXRsZXMgaW4gdGhlIFR5cGVTY3JpcHQgc291cmNlIChmYWlsLWNsb3NlZCkuIiIiCiAgICBzcmMgPSBmcm9udGVuZF9kaXIgLyAic3JjIgogICAgaWYgbm90IHNyYy5pc19kaXIoKToKICAgICAgICByYWlzZSBQYXRjaEVycm9yKGYiZnJvbnRlbmQgc3JjIG5vdCBmb3VuZDoge3NyY30iKQoKICAgIG1hdGNoZWQ6IGxpc3RbdHVwbGVbUGF0aCwgc3RyXV0gPSBbXQogICAgcmVxdWlyZWRfc2VlbiA9IEZhbHNlCiAgICBmb3IgcGF0aCBpbiBzb3J0ZWQoc3JjLnJnbG9iKCIqLnRzeCIpKToKICAgICAgICB0ZXh0ID0gcGF0aC5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICBjb3VudCA9IHRleHQuY291bnQoVVBTVFJFQU1fVE9LRU4pCiAgICAgICAgaWYgbm90IGNvdW50OgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGNvdW50ICE9IDE6CiAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoZiJ7cGF0aH06IGV4cGVjdGVkIGV4YWN0bHkgb25lIHRpdGxlIHRva2VuLCBmb3VuZCB7Y291bnR9IikKICAgICAgICBpZiBSRVBMQUNFTUVOVCBpbiB0ZXh0OgogICAgICAgICAgICByYWlzZSBQYXRjaEVycm9yKGYie3BhdGh9OiBhbHJlYWR5IHBhdGNoZWQiKQogICAgICAgIG1hdGNoZWQuYXBwZW5kKChwYXRoLCB0ZXh0KSkKICAgICAgICBpZiBzdHIocGF0aCkuZW5kc3dpdGgoUkVRVUlSRURfU1VGRklYKToKICAgICAgICAgICAgcmVxdWlyZWRfc2VlbiA9IFRydWUKCiAgICBpZiBsZW4obWF0Y2hlZCkgIT0gRVhQRUNURURfRklMRVM6CiAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcigKICAgICAgICAgICAgZiJleHBlY3RlZCB0aGUgdGl0bGUgdG9rZW4gaW4gZXhhY3RseSB7RVhQRUNURURfRklMRVN9IGZpbGVzOyAiCiAgICAgICAgICAgIGYiZm91bmQge2xlbihtYXRjaGVkKX0gKHtbc3RyKHApIGZvciBwLCBfIGluIG1hdGNoZWRdfSkg4oCUICIKICAgICAgICAgICAgInVwc3RyZWFtIGRyaWZ0LCByZS1yZXZpZXcgcmVxdWlyZWQ7IE5PVEhJTkcgd2FzIG1vZGlmaWVkIgogICAgICAgICkKICAgIGlmIG5vdCByZXF1aXJlZF9zZWVuOgogICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoZiJyZXF1aXJlZCBwYWdlIG5vdCBwcmVzZW50OiB7UkVRVUlSRURfU1VGRklYfTsgTk9USElORyB3YXMgbW9kaWZpZWQiKQoKICAgIHBhdGNoZWQ6IGxpc3RbUGF0aF0gPSBbXQogICAgZm9yIHBhdGgsIHRleHQgaW4gbWF0Y2hlZDoKICAgICAgICBwYXRoLndyaXRlX3RleHQodGV4dC5yZXBsYWNlKFVQU1RSRUFNX1RPS0VOLCBSRVBMQUNFTUVOVCksIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgcGF0Y2hlZC5hcHBlbmQocGF0aCkKICAgICAgICBwcmludChmImJyYW5kZWQ6IHtwYXRofSIpCiAgICBwcmludChmInBhdGNoZWQge2xlbihtYXRjaGVkKX0gcGFnZSB0aXRsZXMgLT4gJ1Rhd2lQb3N0JyBpbiBzcmMiKQogICAgcmV0dXJuIHBhdGNoZWQKCgpkZWYgcGF0Y2hfY29tcGlsZWQoZnJvbnRlbmRfZGlyOiBQYXRoKSAtPiBpbnQ6CiAgICAiIiJSZXBsYWNlIHRoZSBpc0dlbmVyYWxTZXJ2ZXJTaWRlIHRlcm5hcnkgaW4gdGhlIHByZWJ1aWx0IC5uZXh0L3NlcnZlciBKUyBidW5kbGVzLgoKICAgIE5leHQuanMgMTYgVHVyYm9wYWNrIGNvbXBpbGVzIG1ldGFkYXRhLnRpdGxlIHRlcm5hcmllcyBpbnRvIHRoZSBmb3JtCiAgICBgYCgwLFguaXNHZW5lcmFsU2VydmVyU2lkZSkoKT8iUG9zdGl6IjoiR2l0cm9vbSJgYCBpbnNpZGUgdGVtcGxhdGUKICAgIGxpdGVyYWxzIGluIHNlcnZlciBjaHVua3MuICBXZSByZXBsYWNlIHRoZSBlbnRpcmUgdGVybmFyeSB3aXRoIHRoZQogICAgbGl0ZXJhbCBgYCJUYXdpUG9zdCJgYCDigJQgdGhlIHByb2R1Y3QgbmFtZSBpcyBhbHdheXMgVGF3aVBvc3QuCiAgICAiIiIKICAgIHNlcnZlciA9IGZyb250ZW5kX2RpciAvICIubmV4dCIgLyAic2VydmVyIgogICAgaWYgbm90IHNlcnZlci5pc19kaXIoKToKICAgICAgICByYWlzZSBQYXRjaEVycm9yKGYiLm5leHQvc2VydmVyIG5vdCBmb3VuZDoge3NlcnZlcn07IGJhc2UgaW1hZ2UgbWF5IGhhdmUgY2hhbmdlZCIpCgogICAgY291bnQgPSAwCiAgICBmb3IganNfZmlsZSBpbiBzb3J0ZWQoc2VydmVyLnJnbG9iKCIqLmpzIikpOgogICAgICAgIHRleHQgPSBqc19maWxlLnJlYWRfdGV4dChlbmNvZGluZz0idXRmLTgiKQogICAgICAgIGlmICJpc0dlbmVyYWxTZXJ2ZXJTaWRlIiBub3QgaW4gdGV4dDoKICAgICAgICAgICAgY29udGludWUKICAgICAgICBuZXdfdGV4dCwgbiA9IENNUF9USVRMRV9SRS5zdWJuKCciVGF3aVBvc3QiJywgdGV4dCkKICAgICAgICBpZiBuOgogICAgICAgICAgICBqc19maWxlLndyaXRlX3RleHQobmV3X3RleHQsIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgICAgIGNvdW50ICs9IG4KICAgICAgICAgICAgcHJpbnQoZiJjb21waWxlZDoge2pzX2ZpbGV9ICh7bn0gb2NjdXJyZW5jZShzKSkiKQoKICAgIGlmIGNvdW50ID09IDA6CiAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcigKICAgICAgICAgICAgIm5vICdpc0dlbmVyYWxTZXJ2ZXJTaWRlKCk/XCJQb3N0aXpcIjpcIkdpdHJvb21cIicgb2NjdXJyZW5jZXMgaW4gLm5leHQvc2VydmVyIOKAlCAiCiAgICAgICAgICAgICJjb21waWxlZCBvdXRwdXQgbWF5IGhhdmUgY2hhbmdlZCBmb3JtYXQiCiAgICAgICAgKQogICAgcHJpbnQoZiJwYXRjaGVkIHtjb3VudH0gdGl0bGUgb2NjdXJyZW5jZXMgaW4gY29tcGlsZWQgLm5leHQvc2VydmVyIikKICAgIHJldHVybiBjb3VudAoKCmRlZiBtYWluKGFyZ3Y6IGxpc3Rbc3RyXSkgLT4gaW50OgogICAgaWYgbGVuKGFyZ3YpICE9IDI6CiAgICAgICAgcHJpbnQoInVzYWdlOiBwYXRjaF90YXdpcG9zdF9icmFuZGluZy5weSA8YXBwcy9mcm9udGVuZCBkaXI+IiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgIHJldHVybiAyCiAgICBmcm9udGVuZF9kaXIgPSBQYXRoKGFyZ3ZbMV0pCiAgICBwYXRjaF9zcmMoZnJvbnRlbmRfZGlyKQogICAgcGF0Y2hfY29tcGlsZWQoZnJvbnRlbmRfZGlyKQogICAgcmV0dXJuIDAKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgdHJ5OgogICAgICAgIHJhaXNlIFN5c3RlbUV4aXQobWFpbihzeXMuYXJndikpCiAgICBleGNlcHQgUGF0Y2hFcnJvciBhcyBleGM6CiAgICAgICAgcHJpbnQoZiJwYXRjaF90YXdpcG9zdF9icmFuZGluZzoge2V4Y30iLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgxKQo="
    },
    {
      "kind": "complete_build_recipe",
      "name": "Dockerfile.tawipost",
      "repository_path": "Dockerfile.tawipost",
      "media_type": "text/plain; charset=utf-8",
      "sha256": "9c41f6f9dbab48d3b1224dace48077e54bd069171e02256ebe741ec57ce8a6cc",
      "size": 6410,
      "route": "/oss/tawipost/v2.21.8-f8421ebce7bb0648/build-9c41f6f9dbab48d3b1224dace48077e54bd069171e02256ebe741ec57ce8a6cc/Dockerfile.tawipost",
      "content_base64": "IyBUYXdpUG9zdCA9IHRoZSBQb3N0aXogZW5naW5lIHdpdGggb25lIGJvdW5kZWQgTDIgYXV0aCBoYXJkZW5pbmcgcGF0Y2gKIyAoQURSLTA1NSksIHBsdXMgVGF3aSBicmFuZGluZyBhcHBsaWVkIGF0IHRoZSBzZXJ2aWNlIGxheWVyLgojIFJlcGxhY2VzIHRoZSBmb3JtZXIgdGF3aS1wcm9kdWN0LXN1cmZhY2UgR28gaGVhbHRoLXN0dWIuIEJ1aWx0IEZST00gdGhlCiMgZGlnZXN0LXBpbm5lZCB1cHN0cmVhbSBQb3N0aXogaW1hZ2UgbWlycm9yZWQgaW50byB0aGUgaW50ZXJuYWwgcmVnaXN0cnkgYnkgdGhlCiMgbWlycm9yLWltZyBwYXR0ZXJuICgud29vZHBlY2tlci8wOC1idWlsZC55YW1sLCBzYW1lIGFzIHRhd2lkcml2ZT1vQ0lTIC8KIyB0YXdpcGxhbj1WaWt1bmphKS4gUG9zdGl6IHNoaXBzIGFuIG5naW54IHByb3h5IG9uIDo1MDAwIGZyb250aW5nIHRoZSBOb2RlIGFwcCwKIyBjb25maWd1cmVkIHZpYSBlbnYgKERBVEFCQVNFX1VSTC9SRURJU19VUkwvSldUX1NFQ1JFVC9NQUlOX1VSTC4uLikgc3VwcGxpZWQgYnkKIyBkZXBsb3kvazhzL3Rhd2lwb3N0LnlhbWwgYW5kIHRhd2lwb3N0LXNlY3JldHMtZXh0ZXJuYWxzZWNyZXQueWFtbC4gVGhlIHNvbGUKIyB1cHN0cmVhbS1zb3VyY2UgY2hhbmdlIG1ha2VzIExPQ0FMIHJlZ2lzdHJhdGlvbiBmYWlsIGNsb3NlZCB3aGVuIHJlZ2lzdHJhdGlvbgojIGlzIGRpc2FibGVkIHdoaWxlIHByZXNlcnZpbmcgUG9zdGl6J3MgUHJvdmlkZXIuR0VORVJJQyBPSURDIGZhc3QgcGF0aC4gVGhlCiMgS3ViZXJuZXRlcyBtYW5pZmVzdCBkZWxpYmVyYXRlbHkgb3ZlcnJpZGVzIHRoZSB1cHN0cmVhbSBjb21tYW5kIHRvIG9taXQgaXRzCiMgZGVzdHJ1Y3RpdmUgc3RhcnR1cCBtaWdyYXRpb24gd2hpbGUgcmV0YWluaW5nIHRoZSB1cHN0cmVhbSBuZ2lueC9QTTIgcHJvY2VzcwojIGNvbnRyYWN0LgojICAgZG9jczogaHR0cHM6Ly9kb2NzLnBvc3Rpei5jb20vaW5zdGFsbGF0aW9uL2RvY2tlci1jb21wb3NlCiMgICBpbWFnZTogZ2hjci5pby9naXRyb29taHEvcG9zdGl6LWFwcAojICAgc291cmNlL3BhdGNoL2J1aWxkIG9mZmVyOgojICAgICBodHRwczovL2dvLnRhd2kuYWkvb3NzL3Rhd2lwb3N0L3YyLjIxLjgtZjg0MjFlYmNlN2JiMDY0OC9zb3VyY2Utb2ZmZXIuanNvbgpBUkcgUE9TVElaX0VOR0lORV9JTUFHRT1naGNyLmlvL2dpdHJvb21ocS9wb3N0aXotYXBwOnYyLjIxLjhAc2hhMjU2OjNlYzdiYzhlY2Y2MWYwOGMyMmUwOTU0MjkxNzAyYjA5N2Y5NDRkZWY1MTVkYzI1OWNiM2E0NDFhYmE0MDQ2YzAKRlJPTSAke1BPU1RJWl9FTkdJTkVfSU1BR0V9CgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9IlRhd2lQb3N0IgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249IlRhd2lQb3N0IGNhbXBhaWduL3NvY2lhbC1wdWJsaXNoaW5nL3NjaGVkdWxpbmcg4oCUIFBvc3RpeiBlbmdpbmUgd2l0aCB0aGUgQURSLTA1NSBMT0NBTC1yZWdpc3RyYXRpb24gaGFyZGVuaW5nIHBhdGNoIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dvLnRhd2kuYWkvb3NzL3Rhd2lwb3N0L3YyLjIxLjgtZjg0MjFlYmNlN2JiMDY0OC9zb3VyY2Utb2ZmZXIuanNvbiIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPSJBR1BMLTMuMC1vbmx5IgpMQUJFTCB0YXdpLmFpLnByb2R1Y3Q9IlRhd2lQb3N0IgpMQUJFTCB0YXdpLmFpLnNlcnZpY2U9InRhd2lwb3N0IgpMQUJFTCB0YXdpLmFpLmVuZ2luZT0icG9zdGl6IgpMQUJFTCB0YXdpLmFpLmVuZ2luZS1yZWZlcmVuY2U9ImdoY3IuaW8vZ2l0cm9vbWhxL3Bvc3Rpei1hcHBAc2hhMjU2OjNlYzdiYzhlY2Y2MWYwOGMyMmUwOTU0MjkxNzAyYjA5N2Y5NDRkZWY1MTVkYzI1OWNiM2E0NDFhYmE0MDQ2YzAiCkxBQkVMIHRhd2kuYWkudXBzdHJlYW0tcmV2aXNpb249IjlhN2Q5ZGVhZmNmMzczYzc1OWUyZWM3OTU1MjA2YTJhMzFiMDAzZjMiCkxBQkVMIHRhd2kuYWkucGF0Y2gtcG9saWN5PSJBRFItMDU1IgpMQUJFTCB0YXdpLmFpLmNvcnJlc3BvbmRpbmctc291cmNlPSJodHRwczovL2dvLnRhd2kuYWkvb3NzL3Rhd2lwb3N0L3YyLjIxLjgtZjg0MjFlYmNlN2JiMDY0OC9zb3VyY2Utb2ZmZXIuanNvbiIKIyBTb3VyY2UtYmFja2VkIFVTRVIgZXhjZXB0aW9uIChzZWN1cml0eV9saW50IENhdGVnb3J5IDM2KTogdGhlIHVwc3RyZWFtCiMgbmdpbngvUE0yIHN0YXJ0dXAgY29udHJhY3QgcmVxdWlyZXMgcm9vdCBmb3IgYm91bmRlZCBpbml0aWFsaXphdGlvbiBhbmQKIyBwcml2aWxlZ2UgY2hhbmdlczsgdGhlIERlcGxveW1lbnQgbWFrZXMgdGhlIGV4Y2VwdGlvbiBleHBsaWNpdCAodWlkL2dpZCAwLAojIGFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbjpmYWxzZSwgc2VjY29tcCBSdW50aW1lRGVmYXVsdCwgbWluaW1hbCBjYXBhYmlsaXRpZXMsCiMgZGVwbG95L2s4cy90YXdpcG9zdC55YW1sKSBhbmQgdGhlIFByaXNtYSBtaWdyYXRpb24gc3RheXMgbm9uLXJvb3QuCkxBQkVMIHRhd2kuYWkuc2VjdXJpdHkuZXhjZXB0aW9uPSJ1cHN0cmVhbS1yb290LWVudHJ5cG9pbnQiCkxBQkVMIHRhd2kuYWkuc2VjdXJpdHkuZXhjZXB0aW9uLnNvdXJjZT0iZG9jcy9hZHIvMDU1LXRhd2lwb3N0LWwyLWF1dGgtaGFyZGVuaW5nLm1kICsgZGVwbG95L2s4cy90YXdpcG9zdC55YW1sIHNlY3VyaXR5Q29udGV4dCIKCkVOViBUQVdJX1NFUlZJQ0VfSUQ9dGF3aXBvc3QKRU5WIFRBV0lfUFJPRFVDVF9OQU1FPVRhd2lQb3N0CgpDT1BZIHNjcmlwdHMvY2kvcGF0Y2hfdGF3aXBvc3RfYXV0aC5weSAvdG1wL3BhdGNoX3Rhd2lwb3N0X2F1dGgucHkKIyBTZWNvbmQgYm91bmRlZCBwYXRjaDogbmF0aXZlIFRlbXBvcmFsIGNsaWVudCBtVExTICsgSldUIG1pbnRpbmcuIFRoZSB0MAojIFRlbXBvcmFsIGZyb250ZW5kIHJlcXVpcmVzIG11dHVhbCBUTFMgQU5EIGEgSldUIGJlYXJlciB0b2tlbiAoYXV0aG9yaXplcjoKIyBkZWZhdWx0ICsgand0S2V5UHJvdmlkZXIpLiBVcHN0cmVhbSBQb3N0aXogb25seSBzcGVha3Mgc2VydmVyLVRMUyArIGEgc3RhdGljCiMgYXBpLWtleTsgdGhpcyByZXdyaXRlcyB0aGUgU0RLIGNvbm5lY3Rpb24gKHRlbXBvcmFsLm1vZHVsZS50cykgYW5kIHRoZSBoZWFsdGgKIyBwcm9iZSAoaGVhbHRoLmNvbnRyb2xsZXIudHMpIHRvIHByZXNlbnQgYSBjbGllbnQgY2VydCBhbmQgbWludCBhIGZyZXNoIFJTMjU2CiMgdG9rZW4gcGVyIGNhbGwuIFBhdGNoZWQgYmVmb3JlIGJvdGggYnVpbGRzIHNvIHRoZSBzaGFyZWQgbmVzdGpzLWxpYnJhcmllcyBjb3B5CiMgY29tcGlsZWQgaW50byBiYWNrZW5kIEFORCBvcmNoZXN0cmF0b3IgcGlja3MgaXQgdXAuCkNPUFkgc2NyaXB0cy9jaS9wYXRjaF90YXdpcG9zdF90ZW1wb3JhbF9tdGxzLnB5IC90bXAvcGF0Y2hfdGF3aXBvc3RfdGVtcG9yYWxfbXRscy5weQojIFRoaXJkIGJvdW5kZWQgcGF0Y2g6IFRhd2lQb3N0IHBhZ2UtdGl0bGUgYnJhbmRpbmcuIFVwc3RyZWFtIGNvbXB1dGVzIGV2ZXJ5CiMgcGFnZSBtZXRhZGF0YS50aXRsZSBmcm9tIGBpc0dlbmVyYWxTZXJ2ZXJTaWRlKCkgPyAnUG9zdGl6JyA6ICdHaXRyb29tJ2AgYXQKIyByZXF1ZXN0IHRpbWUgKGVudi1kcml2ZW4sIG5vdCBvdmVycmlkYWJsZSksIHNvIHBvc3QudGF3aS5haSBzZXJ2ZWQKIyAiPHRpdGxlPlBvc3RpeiBSZWdpc3RlcjwvdGl0bGU+IiAobGl2ZSAyMDI2LTA3LTIxKS4gVGhlIHBhdGNoIHJld3JpdGVzIHRoYXQKIyBleGFjdCB0ZXJuYXJ5IHRvIHRoZSBsaXRlcmFsICdUYXdpUG9zdCcgYWNyb3NzIHRoZSAxNCB0aXRsZSBzaXRlcyBpbiBib3RoCiMgdGhlIFR5cGVTY3JpcHQgc291cmNlIChmYWlsLWNsb3NlZCBwaW5uZWQgY291bnQpIEFORCB0aGUgcHJlYnVpbHQgY29tcGlsZWQKIyAubmV4dC9zZXJ2ZXIgSlMgYnVuZGxlcyAoYG5leHQgc3RhcnRgIHNlcnZlcyBmcm9tIC5uZXh0LCBidXQgYG5leHQgYnVpbGRgCiMgY2Fubm90IHJ1biBpbnNpZGUgS2FuaWtvIOKAlCBpdCBkb3dubG9hZHMgR29vZ2xlIEZvbnRzIGR1cmluZyBjb21waWxhdGlvbikuCiMgVGhlIHBhdGNoX3Bhd2lwb3N0X2JyYW5kaW5nLnB5IHNjcmlwdCBoYW5kbGVzIGJvdGggcGhhc2VzIGF0b21pY2FsbHkuCkNPUFkgc2NyaXB0cy9jaS9wYXRjaF90YXdpcG9zdF9icmFuZGluZy5weSAvdG1wL3BhdGNoX3Rhd2lwb3N0X2JyYW5kaW5nLnB5ClJVTiBweXRob24zIC90bXAvcGF0Y2hfdGF3aXBvc3RfYXV0aC5weSBcCiAgICAgIC9hcHAvYXBwcy9iYWNrZW5kL3NyYy9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZS50cyBcCiAgICAmJiBweXRob24zIC90bXAvcGF0Y2hfdGF3aXBvc3RfdGVtcG9yYWxfbXRscy5weSBcCiAgICAgIC9hcHAvbGlicmFyaWVzL25lc3Rqcy1saWJyYXJpZXMvc3JjL3RlbXBvcmFsL3RlbXBvcmFsLm1vZHVsZS50cyBcCiAgICAgIC9hcHAvYXBwcy9vcmNoZXN0cmF0b3Ivc3JjL2hlYWx0aC5jb250cm9sbGVyLnRzIFwKICAgICYmIHB5dGhvbjMgL3RtcC9wYXRjaF90YXdpcG9zdF9icmFuZGluZy5weSAvYXBwL2FwcHMvZnJvbnRlbmQgXAogICAgJiYgTk9ERV9PUFRJT05TPS0tbWF4LW9sZC1zcGFjZS1zaXplPTQwOTYgcG5wbSBydW4gYnVpbGQ6YmFja2VuZCBcCiAgICAmJiBOT0RFX09QVElPTlM9LS1tYXgtb2xkLXNwYWNlLXNpemU9NDA5NiBwbnBtIHJ1biBidWlsZDpvcmNoZXN0cmF0b3IgXAogICAgJiYgdGVzdCAtcyAvYXBwL2FwcHMvYmFja2VuZC9kaXN0L2FwcHMvYmFja2VuZC9zcmMvc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UuanMgXAogICAgJiYgdGVzdCAtcyAvYXBwL2FwcHMvYmFja2VuZC9kaXN0L2FwcHMvYmFja2VuZC9zcmMvbWFpbi5qcyBcCiAgICAmJiB0ZXN0IC1zIC9hcHAvYXBwcy9vcmNoZXN0cmF0b3IvZGlzdC9hcHBzL29yY2hlc3RyYXRvci9zcmMvaGVhbHRoLmNvbnRyb2xsZXIuanMgXAogICAgJiYgdGVzdCAtcyAvYXBwL2FwcHMvb3JjaGVzdHJhdG9yL2Rpc3QvYXBwcy9vcmNoZXN0cmF0b3Ivc3JjL21haW4uanMgXAogICAgIyBBbnRpLWZhbHNpZmljYXRpb246IGZhaWwgdGhlIGJ1aWxkIGlmIGVpdGhlciBwYXRjaCBkaWQgbm90IHJlYWNoIHRoZQogICAgIyBjb21waWxlZCBvcmNoZXN0cmF0b3IgZGlzdCAobVRMUyBjbGllbnRDZXJ0UGFpciArIEpXVCBtaW50aW5nIG1hcmtlcikuCiAgICAmJiBncmVwIC1xIGNsaWVudENlcnRQYWlyIC9hcHAvYXBwcy9vcmNoZXN0cmF0b3IvZGlzdC9hcHBzL29yY2hlc3RyYXRvci9zcmMvaGVhbHRoLmNvbnRyb2xsZXIuanMgXAogICAgJiYgZ3JlcCAtcSBURU1QT1JBTF9KV1RfUFJJVkFURV9LRVlfUEFUSCAvYXBwL2FwcHMvb3JjaGVzdHJhdG9yL2Rpc3QvYXBwcy9vcmNoZXN0cmF0b3Ivc3JjL2hlYWx0aC5jb250cm9sbGVyLmpzIFwKICAgICYmIGdyZXAgLXEgYWxsb3dDb25uZWN0aW9uRmFpbHVyZSAvYXBwL2FwcHMvb3JjaGVzdHJhdG9yL2Rpc3QvbGlicmFyaWVzL25lc3Rqcy1saWJyYXJpZXMvc3JjL3RlbXBvcmFsL3RlbXBvcmFsLm1vZHVsZS5qcyBcCiAgICAmJiBncmVwIC1xIGNsaWVudENlcnRQYWlyIC9hcHAvYXBwcy9vcmNoZXN0cmF0b3IvZGlzdC9saWJyYXJpZXMvbmVzdGpzLWxpYnJhcmllcy9zcmMvdGVtcG9yYWwvdGVtcG9yYWwubW9kdWxlLmpzIFwKICAgICMgQW50aS1mYWxzaWZpY2F0aW9uOiB0aGUgYnJhbmRpbmcgbGl0ZXJhbCBtdXN0IHJlYWNoIGJvdGggdGhlIGNvbXBpbGVkCiAgICAjIC5uZXh0L3NlcnZlciBidW5kbGVzIEFORCB0aGUgc291cmNlIG11c3QgYmUgZnJlZSBvZiAnUG9zdGl6JyB0aXRsZXMuCiAgICAmJiBncmVwIC1ycSAiVGF3aVBvc3QiIC9hcHAvYXBwcy9mcm9udGVuZC8ubmV4dC9zZXJ2ZXIgXAogICAgJiYgISBncmVwIC1ycSAiaXNHZW5lcmFsU2VydmVyU2lkZSgpID8gJ1Bvc3RpeiciIC9hcHAvYXBwcy9mcm9udGVuZC9zcmMgXAogICAgJiYgISBncmVwIC1ycSAnaXNHZW5lcmFsU2VydmVyU2lkZSgpPyJQb3N0aXoiJyAvYXBwL2FwcHMvZnJvbnRlbmQvLm5leHQvc2VydmVyIFwKICAgICYmIHJtIC1mIC90bXAvcGF0Y2hfdGF3aXBvc3RfYXV0aC5weSAvdG1wL3BhdGNoX3Rhd2lwb3N0X3RlbXBvcmFsX210bHMucHkgL3RtcC9wYXRjaF90YXdpcG9zdF9icmFuZGluZy5weQoKIyBEbyBub3QgZGVjbGFyZSBVU0VSIGhlcmUuIFRoZSB1cHN0cmVhbSBuZ2lueC9QTTIgc3RhcnR1cCBjb250cmFjdCByZXF1aXJlcwojIHJvb3QgZm9yIGJvdW5kZWQgaW5pdGlhbGl6YXRpb24gYW5kIHByaXZpbGVnZSBjaGFuZ2VzLiBUaGUgRGVwbG95bWVudCBtYWtlcwojIHRoYXQgZXhjZXB0aW9uIGV4cGxpY2l0ICh1aWQvZ2lkIDAsIG5vIHByaXZpbGVnZSBlc2NhbGF0aW9uLCBzZWNjb21wLCBhbmQgYQojIG1pbmltYWwgY2FwYWJpbGl0eSBzZXQpOyB0aGUgUHJpc21hIG1pZ3JhdGlvbiByZW1haW5zIG5vbi1yb290Lgo="
    }
  ],
  "references": {
    "technical_adr": "docs/adr/055-tawipost-l2-auth-hardening.md",
    "compliance_record": "docs/compliance/legal/OSS_ENGINE_LICENSES_AND_SOURCE_OFFER.md"
  }
}
