[{"data":1,"prerenderedAt":284},["ShallowReactive",2],{"docs-nav:1.0.0":3,"docs:\u002Fdocs\u002Fauthentication":91,"docs-samples:\u002Fdocs\u002Fauthentication":274},[4,10,14,18,22,26,30,34,38,44,48,52,55,58,61,64,67,70,73,76,80,84,87],{"path":5,"title":6,"section":7,"order":8,"generated":9},"\u002Fdocs\u002Faccount-groups","Account groups","overview",15,false,{"path":11,"title":12,"section":7,"order":13,"generated":9},"\u002Fdocs\u002Fapi-keys","API keys",20,{"path":15,"title":16,"section":7,"order":17,"generated":9},"\u002Fdocs\u002Fapi-summary","What the API covers",5,{"path":19,"title":20,"section":7,"order":21,"generated":9},"\u002Fdocs\u002Fauthentication","Authentication",25,{"path":23,"title":24,"section":7,"order":25,"generated":9},"\u002Fdocs\u002Fenvironments","Environments",10,{"path":27,"title":28,"section":7,"order":29,"generated":9},"\u002Fdocs","API documentation",1,{"path":31,"title":32,"section":7,"order":33,"generated":9},"\u002Fdocs\u002Fmaking-requests","Making requests",30,{"path":35,"title":36,"section":7,"order":37,"generated":9},"\u002Fdocs\u002Fsigned-intent","Signed order intent",27,{"path":39,"title":40,"section":41,"order":42,"generated":43},"\u002Fdocs\u002Freference\u002Faccount-groups","Reading account groups","websocket",3,true,{"path":45,"title":46,"section":47,"order":17,"generated":43},"\u002Fdocs\u002Freference\u002Favailable-instruments","Available instruments","rest",{"path":49,"title":50,"section":47,"order":51,"generated":43},"\u002Fdocs\u002Freference\u002Fbalances","Balances",8,{"path":53,"title":54,"section":47,"order":21,"generated":43},"\u002Fdocs\u002Freference\u002Fclient-withdrawals","Withdrawals",{"path":56,"title":57,"section":41,"order":33,"generated":43},"\u002Fdocs\u002Freference\u002Ferror-codes","Trade error codes",{"path":59,"title":60,"section":47,"order":21,"generated":43},"\u002Fdocs\u002Freference\u002Forder-lookup","Reading orders back",{"path":62,"title":63,"section":41,"order":25,"generated":43},"\u002Fdocs\u002Freference\u002Forder-sessions","Order sessions and recovery",{"path":65,"title":66,"section":41,"order":13,"generated":43},"\u002Fdocs\u002Freference\u002Forder-status","Order status",{"path":68,"title":69,"section":41,"order":17,"generated":43},"\u002Fdocs\u002Freference\u002Fprice-channel","Price channel",{"path":71,"title":72,"section":47,"order":13,"generated":43},"\u002Fdocs\u002Freference\u002Fsettlement-parties","Settlement parties",{"path":74,"title":75,"section":47,"order":8,"generated":43},"\u002Fdocs\u002Freference\u002Ftrades","Trades",{"path":77,"title":78,"section":47,"order":79,"generated":43},"\u002Fdocs\u002Freference\u002Ftrading-limit","Trading limit",9,{"path":81,"title":82,"section":83,"order":33,"generated":43},"\u002Fdocs\u002Freference\u002Ftransaction-codes","Transaction code tables","shared",{"path":85,"title":86,"section":47,"order":25,"generated":43},"\u002Fdocs\u002Freference\u002Ftransactions","Transactions",{"path":88,"title":89,"section":47,"order":90,"generated":43},"\u002Fdocs\u002Freference\u002Ftransfers","Internal transfers",7,{"page":92,"elsewhere":9},{"path":19,"title":20,"description":93,"body":94,"examples":241},"Signing REST requests with HMAC-SHA512, and the exact message the signature is computed over.",{"type":95,"value":96,"toc":236},"minimark",[97,106,111,118,129,132,157,160,175,178,182,225,232],[98,99,100,101,105],"p",{},"Every REST request is signed with ",[102,103,104],"strong",{},"HMAC-SHA512",". The signature travels; the\nsecret does not, so a request can be verified without the secret ever crossing\nthe network.",[107,108,110],"h2",{"id":109},"what-gets-signed","What gets signed",[98,112,113,114,117],{},"The signed message is the request path and the JSON body, joined by a ",[102,115,116],{},"null\nbyte",":",[119,120,126],"pre",{"className":121,"code":123,"language":124,"meta":125},[122],"language-text","path + \"\\0\" + body\n","text","",[127,128,123],"code",{"__ignoreMap":125},[98,130,131],{},"Three details account for most integration failures:",[133,134,135,143,150],"ul",{},[136,137,138,139,142],"li",{},"The separator is a null byte (",[127,140,141],{},"\\0","), not a space or a newline.",[136,144,145,146,149],{},"The secret is ",[102,147,148],{},"base64-decoded"," before use as the HMAC key. Signing with the\nraw string produces a well-formed signature that always fails verification.",[136,151,152,153,156],{},"The signature is computed over the body ",[102,154,155],{},"exactly as sent",". Serialise once,\nsign that string, and transmit the same bytes — re-serialising afterwards can\nreorder keys and invalidate the signature.",[107,158,159],{"id":159},"tonce",[98,161,162,163,165,166,169,170,174],{},"The body carries a ",[127,164,159],{},": the current Unix time in ",[102,167,168],{},"microseconds",". Because\nit is part of the body, it must be added ",[171,172,173],"em",{},"before"," signing.",[98,176,177],{},"Milliseconds are the usual mistake here, and they are rejected.",[107,179,181],{"id":180},"headers","Headers",[119,183,187],{"className":184,"code":185,"language":186,"meta":125,"style":125},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Rest-Key: \u003Cyour API key>\nRest-Sign: \u003Cthe signature>\nContent-Type: application\u002Fjson\n","http",[127,188,189,204,215],{"__ignoreMap":125},[190,191,193,197,200],"span",{"class":192,"line":29},"line",[190,194,196],{"class":195},"swJcz","Rest-Key",[190,198,117],{"class":199},"sbssI",[190,201,203],{"class":202},"sfazB"," \u003Cyour API key>\n",[190,205,207,210,212],{"class":192,"line":206},2,[190,208,209],{"class":195},"Rest-Sign",[190,211,117],{"class":199},[190,213,214],{"class":202}," \u003Cthe signature>\n",[190,216,217,220,222],{"class":192,"line":42},[190,218,219],{"class":195},"Content-Type",[190,221,117],{"class":199},[190,223,224],{"class":202}," application\u002Fjson\n",[226,227,229],"caution",{"title":228},"Keep signing off shared machines",[98,230,231],{},"Never paste a production secret into an online compiler, a shared notebook or a\nscratch environment. Generate signatures where you control the machine.",[233,234,235],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":125,"searchDepth":42,"depth":42,"links":237},[238,239,240],{"id":109,"depth":206,"text":110},{"id":159,"depth":206,"text":159},{"id":180,"depth":206,"text":181},[242,262],{"id":243,"heading":244,"variants":245},"sign","Signing function",[246,250,254,258],{"title":247,"lang":248,"code":249},"Python","python","import base64\nimport hashlib\nimport hmac\n\ndef sign(secret: str, message: str) -> str:\n    key = base64.b64decode(secret)\n    digest = hmac.new(key, message.encode('utf-8'), hashlib.sha512).digest()\n\n    return base64.b64encode(digest).decode('utf-8')\n",{"title":251,"lang":252,"code":253},"JavaScript","javascript","import { createHmac } from 'node:crypto'\n\nfunction sign(secret, message) {\n  return createHmac('sha512', Buffer.from(secret, 'base64'))\n    .update(message, 'utf8')\n    .digest('base64')\n}\n",{"title":255,"lang":256,"code":257},"Java","java","import java.nio.charset.StandardCharsets;\nimport java.util.Base64;\nimport javax.crypto.Mac;\nimport javax.crypto.spec.SecretKeySpec;\n\nstatic String sign(String secret, String message) throws Exception {\n    byte[] key = Base64.getDecoder().decode(secret);\n\n    Mac mac = Mac.getInstance(\"HmacSHA512\");\n    mac.init(new SecretKeySpec(key, \"HmacSHA512\"));\n\n    byte[] digest = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));\n\n    return Base64.getEncoder().encodeToString(digest);\n}\n",{"title":259,"lang":260,"code":261},"Go","go","import (\n    \"crypto\u002Fhmac\"\n    \"crypto\u002Fsha512\"\n    \"encoding\u002Fbase64\"\n)\n\nfunc sign(secret, message string) (string, error) {\n    key, err := base64.StdEncoding.DecodeString(secret)\n    if err != nil {\n        return \"\", err\n    }\n\n    mac := hmac.New(sha512.New, key)\n    mac.Write([]byte(message))\n\n    return base64.StdEncoding.EncodeToString(mac.Sum(nil)), nil\n}\n",{"id":263,"heading":264,"variants":265},"request","Signing a request",[266,268,270,272],{"title":247,"lang":248,"code":267},"import json\nimport time\n\ndef signed_request(secret: str, path: str, params: dict) -> tuple[str, str]:\n    params['tonce'] = int(time.time() * 1_000_000)\n    body = json.dumps(params)\n\n    # Path and body joined by a null byte — not a space, not a newline.\n    return body, sign(secret, path + '\\0' + body)\n",{"title":251,"lang":252,"code":269},"function signedRequest(secret, path, params) {\n  const body = JSON.stringify({ ...params, tonce: Date.now() * 1000 })\n\n  \u002F\u002F Path and body joined by a null byte — not a space, not a newline.\n  return { body, signature: sign(secret, `${path}\\0${body}`) }\n}\n",{"title":255,"lang":256,"code":271},"static Signed signedRequest(String secret, String path, Map\u003CString, Object> params)\n        throws Exception {\n    Map\u003CString, Object> withTonce = new LinkedHashMap\u003C>(params);\n    withTonce.put(\"tonce\", System.currentTimeMillis() * 1000L);\n\n    String body = mapper.writeValueAsString(withTonce);\n\n    \u002F\u002F Path and body joined by a null byte — not a space, not a newline.\n    return new Signed(body, sign(secret, path + '\\0' + body));\n}\n",{"title":259,"lang":260,"code":273},"func signedRequest(secret, path string, params map[string]any) (string, string, error) {\n    params[\"tonce\"] = time.Now().UnixMicro()\n\n    body, err := json.Marshal(params)\n    if err != nil {\n        return \"\", \"\", err\n    }\n\n    \u002F\u002F Path and body joined by a null byte — not a space, not a newline.\n    signature, err := sign(secret, path+\"\\x00\"+string(body))\n\n    return string(body), signature, err\n}\n",{"html":275},[276,277,278,279,280,281,282,283],"\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> base64\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> hashlib\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> hmac\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">def\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> str\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> str\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> ->\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> str\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    key \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">b64decode\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    digest \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> hmac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">key\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">encode\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">utf-8\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">),\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> hashlib\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">sha512\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">digest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">b64encode\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">digest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">decode\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">utf-8\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> createHmac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> }\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\"> from\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> '\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">node:crypto\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">function\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">  return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> createHmac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">sha512\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> Buffer\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">from\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> '\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">    .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">update\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> '\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">utf8\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">    .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">digest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> java\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">nio\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">charset\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">StandardCharsets\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> java\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">util\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">Base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> javax\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">crypto\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">Mac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> javax\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">crypto\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">spec\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">SecretKeySpec\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">static\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> throws Exception \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">    byte\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">[]\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> key \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> Base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">getDecoder\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">().\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">decode\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">    Mac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> mac \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> Mac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">getInstance\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">HmacSHA512\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    mac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">init\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> SecretKeySpec\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">key\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> \"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">HmacSHA512\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">));\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">    byte\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">[]\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> digest \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> mac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">doFinal\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">getBytes\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">StandardCharsets\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">UTF_8\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">));\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> Base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">getEncoder\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">().\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">encodeToString\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">digest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> (\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">    \"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\">crypto\u002Fhmac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">    \"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\">crypto\u002Fsha512\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">    \"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\">encoding\u002Fbase64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">func\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> (\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> error\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    key\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">StdEncoding\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">DecodeString\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">!=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> nil\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">        return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> \"\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    mac \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> hmac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">New\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">sha512\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">New\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> key\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    mac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">Write\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">([]\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">byte\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> base64\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">StdEncoding\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">EncodeToString\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">mac\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">Sum\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(nil)),\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> nil\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> json\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> time\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">def\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> signed_request\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> str\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> path\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> str\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> dict\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> ->\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> tuple\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">[\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\">str\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> str\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">]:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">[\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">tonce\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">]\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\"> int\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">time\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">time\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">()\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> *\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C\"> 1_000_000\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    body \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">dumps\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic\">    # Path and body joined by a null byte — not a space, not a newline.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> path \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">+\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> '\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">\\0\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> +\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">function\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> signedRequest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> path\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">  const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> JSON\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">stringify\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">{\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> ...\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\"> tonce\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> Date\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">now\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">() \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">*\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C\"> 1000\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> }\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic\">  \u002F\u002F Path and body joined by a null byte — not a space, not a newline.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">  return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\"> signature\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> `${\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">path\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">\\0\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">${\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}`\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178\">) \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">static\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> Signed\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> signedRequest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> path\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> Map\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> Object\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">        throws Exception \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">    Map\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> Object\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> withTonce \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> LinkedHashMap\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">&#x3C;>(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    withTonce\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">put\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">tonce\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> System\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">currentTimeMillis\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">()\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> *\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C\"> 1000L\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">    String\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> body \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> mapper\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">writeValueAsString\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">withTonce\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic\">    \u002F\u002F Path and body joined by a null byte — not a space, not a newline.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> Signed\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> path \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">+\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> '\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">\\0\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> +\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">));\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight\" style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">func\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> signedRequest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> path\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic\"> params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> map[\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">]\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B\">any\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> (\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> error\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">[\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D\">tonce\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">]\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> time\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">Now\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">().\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">UnixMicro\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\">Marshal\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">params\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">!=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> nil\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">        return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> \"\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\"> \"\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic\">    \u002F\u002F Path and body joined by a null byte — not a space, not a newline.\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">    signature\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">:=\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF\"> sign\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">secret\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> path\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">+\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">\\x00\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">+\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\">string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA\"> string\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\">body\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">),\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> signature\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">,\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8\"> err\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF\">}\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1787826505455]