diff --git a/traffic-score-tests/dochack.js b/traffic-score-tests/dochack.js new file mode 100644 index 000000000..854c529eb --- /dev/null +++ b/traffic-score-tests/dochack.js @@ -0,0 +1,1607 @@ +/* Generated by the Nim Compiler v2.0.0 */ +var framePtr = null; +var excHandler = 0; +var lastJSError = null; +var NTI33554466 = {size: 0,kind: 1,base: null,node: null,finalizer: null}; +var NTI721420302 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI33554435 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI973078607 = {size: 0,kind: 31,base: null,node: null,finalizer: null}; +var NTI973078613 = {size: 0, kind: 18, base: null, node: null, finalizer: null}; +var NTI134217745 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217749 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217751 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555173 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555181 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33554449 = {size: 0,kind: 28,base: null,node: null,finalizer: null}; +var NTI33554450 = {size: 0,kind: 29,base: null,node: null,finalizer: null}; +var NTI33555180 = {size: 0, kind: 22, base: null, node: null, finalizer: null}; +var NTI33555177 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI33555178 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217741 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NTI134217743 = {size: 0, kind: 17, base: null, node: null, finalizer: null}; +var NNI134217743 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217743.node = NNI134217743; +var NNI134217741 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217741.node = NNI134217741; +var NNI33555178 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555178.node = NNI33555178; +NTI33555180.base = NTI33555177; +NTI33555181.base = NTI33555177; +var NNI33555177 = {kind: 2, len: 5, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "parent", len: 0, typ: NTI33555180, name: "parent", sons: null}, +{kind: 1, offset: "name", len: 0, typ: NTI33554450, name: "name", sons: null}, +{kind: 1, offset: "message", len: 0, typ: NTI33554449, name: "msg", sons: null}, +{kind: 1, offset: "trace", len: 0, typ: NTI33554449, name: "trace", sons: null}, +{kind: 1, offset: "up", len: 0, typ: NTI33555181, name: "up", sons: null}]}; +NTI33555177.node = NNI33555177; +var NNI33555173 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI33555173.node = NNI33555173; +NTI33555177.base = NTI33555173; +NTI33555178.base = NTI33555177; +NTI134217741.base = NTI33555178; +NTI134217743.base = NTI134217741; +var NNI134217751 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217751.node = NNI134217751; +NTI134217751.base = NTI33555178; +var NNI134217749 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217749.node = NNI134217749; +NTI134217749.base = NTI33555178; +var NNI134217745 = {kind: 2, len: 0, offset: 0, typ: null, name: null, sons: []}; +NTI134217745.node = NNI134217745; +NTI134217745.base = NTI33555178; +var NNI973078613 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "a", len: 0, typ: NTI973078607, name: "a", sons: null}, +{kind: 1, offset: "b", len: 0, typ: NTI33554435, name: "b", sons: null}]}; +NTI973078613.node = NNI973078613; +var NNI721420302 = {kind: 2, len: 2, offset: 0, typ: null, name: null, sons: [{kind: 1, offset: "Field0", len: 0, typ: NTI33554435, name: "Field0", sons: null}, +{kind: 1, offset: "Field1", len: 0, typ: NTI33554466, name: "Field1", sons: null}]}; +NTI721420302.node = NNI721420302; + +function mnewString(len_33557003) { + return new Array(len_33557003); + + + +} + +function toJSStr(s_33556901) { + var result_33556902 = null; + + var res_33556943 = newSeq_33556919((s_33556901).length); + var i_33556944 = 0; + var j_33556945 = 0; + Label1: { + Label2: while (true) { + if (!(i_33556944 < (s_33556901).length)) break Label2; + var c_33556946 = s_33556901[i_33556944]; + if ((c_33556946 < 128)) { + res_33556943[j_33556945] = String.fromCharCode(c_33556946); + i_33556944 += 1; + } + else { + var helper_33556959 = newSeq_33556919(0); + Label3: { + Label4: while (true) { + if (!true) break Label4; + var code_33556960 = c_33556946.toString(16); + if ((((code_33556960) == null ? 0 : (code_33556960).length) == 1)) { + helper_33556959.push("%0");; + } + else { + helper_33556959.push("%");; + } + + helper_33556959.push(code_33556960);; + i_33556944 += 1; + if ((((s_33556901).length <= i_33556944) || (s_33556901[i_33556944] < 128))) { + break Label3; + } + + c_33556946 = s_33556901[i_33556944]; + } + }; +++excHandler; + try { + res_33556943[j_33556945] = decodeURIComponent(helper_33556959.join("")); +--excHandler; +} catch (EXCEPTION) { + var prevJSError = lastJSError; + lastJSError = EXCEPTION; + --excHandler; + res_33556943[j_33556945] = helper_33556959.join(""); + lastJSError = prevJSError; + } finally { + } + } + + j_33556945 += 1; + } + }; + if (res_33556943.length < j_33556945) { for (var i = res_33556943.length ; i < j_33556945 ; ++i) res_33556943.push(null); } + else { res_33556943.length = j_33556945; }; + result_33556902 = res_33556943.join(""); + + return result_33556902; + +} + +function raiseException(e_33556653, ename_33556654) { + e_33556653.name = ename_33556654; + if ((excHandler == 0)) { + unhandledException(e_33556653); + } + + throw e_33556653; + + +} + +function addInt(a_33557050, b_33557051) { + var result = a_33557050 + b_33557051; + checkOverflowInt(result); + return result; + + + +} + +function chckRange(i_33557324, a_33557325, b_33557326) { + var result_33557327 = 0; + + BeforeRet: { + if (((a_33557325 <= i_33557324) && (i_33557324 <= b_33557326))) { + result_33557327 = i_33557324; + break BeforeRet; + } + else { + raiseRangeError(); + } + + }; + + return result_33557327; + +} + +function setConstr() { + var result = {}; + for (var i = 0; i < arguments.length; ++i) { + var x = arguments[i]; + if (typeof(x) == "object") { + for (var j = x[0]; j <= x[1]; ++j) { + result[j] = true; + } + } else { + result[x] = true; + } + } + return result; + + + +} +var ConstSet1 = setConstr(17, 16, 4, 18, 27, 19, 23, 22, 21); + +function nimCopy(dest_33557268, src_33557269, ti_33557270) { + var result_33557279 = null; + + switch (ti_33557270.kind) { + case 21: + case 22: + case 23: + case 5: + if (!(isFatPointer_33557259(ti_33557270))) { + result_33557279 = src_33557269; + } + else { + result_33557279 = [src_33557269[0], src_33557269[1]]; + } + + break; + case 19: + if (dest_33557268 === null || dest_33557268 === undefined) { + dest_33557268 = {}; + } + else { + for (var key in dest_33557268) { delete dest_33557268[key]; } + } + for (var key in src_33557269) { dest_33557268[key] = src_33557269[key]; } + result_33557279 = dest_33557268; + + break; + case 18: + case 17: + if (!((ti_33557270.base == null))) { + result_33557279 = nimCopy(dest_33557268, src_33557269, ti_33557270.base); + } + else { + if ((ti_33557270.kind == 17)) { + result_33557279 = (dest_33557268 === null || dest_33557268 === undefined) ? {m_type: ti_33557270} : dest_33557268; + } + else { + result_33557279 = (dest_33557268 === null || dest_33557268 === undefined) ? {} : dest_33557268; + } + } + nimCopyAux(result_33557279, src_33557269, ti_33557270.node); + break; + case 4: + case 16: + if(ArrayBuffer.isView(src_33557269)) { + if(dest_33557268 === null || dest_33557268 === undefined || dest_33557268.length != src_33557269.length) { + dest_33557268 = new src_33557269.constructor(src_33557269); + } else { + dest_33557268.set(src_33557269, 0); + } + result_33557279 = dest_33557268; + } else { + if (src_33557269 === null) { + result_33557279 = null; + } + else { + if (dest_33557268 === null || dest_33557268 === undefined || dest_33557268.length != src_33557269.length) { + dest_33557268 = new Array(src_33557269.length); + } + result_33557279 = dest_33557268; + for (var i = 0; i < src_33557269.length; ++i) { + result_33557279[i] = nimCopy(result_33557279[i], src_33557269[i], ti_33557270.base); + } + } + } + + break; + case 24: + case 27: + if (src_33557269 === null) { + result_33557279 = null; + } + else { + if (dest_33557268 === null || dest_33557268 === undefined || dest_33557268.length != src_33557269.length) { + dest_33557268 = new Array(src_33557269.length); + } + result_33557279 = dest_33557268; + for (var i = 0; i < src_33557269.length; ++i) { + result_33557279[i] = nimCopy(result_33557279[i], src_33557269[i], ti_33557270.base); + } + } + + break; + case 28: + if (src_33557269 !== null) { + result_33557279 = src_33557269.slice(0); + } + + break; + default: + result_33557279 = src_33557269; + break; + } + + return result_33557279; + +} + +function chckIndx(i_33557319, a_33557320, b_33557321) { + var result_33557322 = 0; + + BeforeRet: { + if (((a_33557320 <= i_33557319) && (i_33557319 <= b_33557321))) { + result_33557322 = i_33557319; + break BeforeRet; + } + else { + raiseIndexError(i_33557319, a_33557320, b_33557321); + } + + }; + + return result_33557322; + +} + +function makeNimstrLit(c_33556895) { + var result = []; + for (var i = 0; i < c_33556895.length; ++i) { + result[i] = c_33556895.charCodeAt(i); + } + return result; + + + +} + +function subInt(a_33557054, b_33557055) { + var result = a_33557054 - b_33557055; + checkOverflowInt(result); + return result; + + + +} + +function cstrToNimstr(c_33556898) { + var ln = c_33556898.length; + var result = new Array(ln); + var r = 0; + for (var i = 0; i < ln; ++i) { + var ch = c_33556898.charCodeAt(i); + + if (ch < 128) { + result[r] = ch; + } + else { + if (ch < 2048) { + result[r] = (ch >> 6) | 192; + } + else { + if (ch < 55296 || ch >= 57344) { + result[r] = (ch >> 12) | 224; + } + else { + ++i; + ch = 65536 + (((ch & 1023) << 10) | (c_33556898.charCodeAt(i) & 1023)); + result[r] = (ch >> 18) | 240; + ++r; + result[r] = ((ch >> 12) & 63) | 128; + } + ++r; + result[r] = ((ch >> 6) & 63) | 128; + } + ++r; + result[r] = (ch & 63) | 128; + } + ++r; + } + return result; + + + +} +var ConstSet2 = setConstr([65, 90]); +var ConstSet3 = setConstr(95, 32, 46); +var ConstSet4 = setConstr(95, 32, 46); + +function mulInt(a_33557058, b_33557059) { + var result = a_33557058 * b_33557059; + checkOverflowInt(result); + return result; + + + +} +var ConstSet5 = setConstr([97, 122]); +var ConstSet6 = setConstr([65, 90], [97, 122]); +var ConstSet7 = setConstr([97, 122]); +var ConstSet8 = setConstr([65, 90]); +var ConstSet9 = setConstr([65, 90], [97, 122]); + +function nimMax(a_33557108, b_33557109) { + var Temporary1; + + var result_33557110 = 0; + + BeforeRet: { + if ((b_33557109 <= a_33557108)) { + Temporary1 = a_33557108; + } + else { + Temporary1 = b_33557109; + } + + result_33557110 = Temporary1; + break BeforeRet; + }; + + return result_33557110; + +} + +function nimMin(a_33557104, b_33557105) { + var Temporary1; + + var result_33557106 = 0; + + BeforeRet: { + if ((a_33557104 <= b_33557105)) { + Temporary1 = a_33557104; + } + else { + Temporary1 = b_33557105; + } + + result_33557106 = Temporary1; + break BeforeRet; + }; + + return result_33557106; + +} + +function addChar(x_33557415, c_33557416) { + x_33557415.push(c_33557416); + + +} +var objectID_1207959729 = [0]; + +function setTheme(theme_570425350) { + document.documentElement.setAttribute("data-theme", theme_570425350); + window.localStorage.setItem("theme", theme_570425350); + + +} + +function add_33556373(x_33556374, x_33556374_Idx, y_33556375) { + if (x_33556374[x_33556374_Idx] === null) { x_33556374[x_33556374_Idx] = []; } + var off = x_33556374[x_33556374_Idx].length; + x_33556374[x_33556374_Idx].length += y_33556375.length; + for (var i = 0; i < y_33556375.length; ++i) { + x_33556374[x_33556374_Idx][off+i] = y_33556375.charCodeAt(i); + } + + + +} + +function newSeq_33556919(len_33556921) { + var result_33556922 = []; + + result_33556922 = new Array(len_33556921); for (var i = 0 ; i < len_33556921 ; ++i) { result_33556922[i] = null; } + return result_33556922; + +} + +function unhandledException(e_33556649) { + var buf_33556650 = [[]]; + if (!(((e_33556649.message).length == 0))) { + buf_33556650[0].push.apply(buf_33556650[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110,58,32]);; + buf_33556650[0].push.apply(buf_33556650[0], e_33556649.message);; + } + else { + buf_33556650[0].push.apply(buf_33556650[0], [69,114,114,111,114,58,32,117,110,104,97,110,100,108,101,100,32,101,120,99,101,112,116,105,111,110]);; + } + + buf_33556650[0].push.apply(buf_33556650[0], [32,91]);; + add_33556373(buf_33556650, 0, e_33556649.name); + buf_33556650[0].push.apply(buf_33556650[0], [93,10]);; + var cbuf_33556651 = toJSStr(buf_33556650[0]); + if (typeof(Error) !== "undefined") { + throw new Error(cbuf_33556651); + } + else { + throw cbuf_33556651; + } + + + +} + +function raiseOverflow() { + raiseException({message: [111,118,101,114,45,32,111,114,32,117,110,100,101,114,102,108,111,119], parent: null, m_type: NTI134217743, name: null, trace: [], up: null}, "OverflowDefect"); + + +} + +function checkOverflowInt(a_33557048) { + if (a_33557048 > 2147483647 || a_33557048 < -2147483648) raiseOverflow(); + + + +} + +function raiseRangeError() { + raiseException({message: [118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101], parent: null, m_type: NTI134217751, name: null, trace: [], up: null}, "RangeDefect"); + + +} + +function addChars_301990090(result_301990092, result_301990092_Idx, x_301990093, start_301990094, n_301990095) { + var Temporary1; + + var old_301990096 = (result_301990092[result_301990092_Idx]).length; + if (result_301990092[result_301990092_Idx].length < (Temporary1 = chckRange(addInt(old_301990096, n_301990095), 0, 2147483647), Temporary1)) { for (var i = result_301990092[result_301990092_Idx].length; i < Temporary1; ++i) result_301990092[result_301990092_Idx].push(0); } + else {result_301990092[result_301990092_Idx].length = Temporary1; }; + Label2: { + var iHEX60gensym4_301990110 = 0; + var i_570426543 = 0; + Label3: { + Label4: while (true) { + if (!(i_570426543 < n_301990095)) break Label4; + iHEX60gensym4_301990110 = i_570426543; + result_301990092[result_301990092_Idx][chckIndx(addInt(old_301990096, iHEX60gensym4_301990110), 0, (result_301990092[result_301990092_Idx]).length - 1)] = x_301990093.charCodeAt(chckIndx(addInt(start_301990094, iHEX60gensym4_301990110), 0, (x_301990093).length - 1)); + i_570426543 = addInt(i_570426543, 1); + } + }; + }; + + +} + +function addChars_301990086(result_301990088, result_301990088_Idx, x_301990089) { + addChars_301990090(result_301990088, result_301990088_Idx, x_301990089, 0, ((x_301990089) == null ? 0 : (x_301990089).length)); + + +} + +function addInt_301990111(result_301990112, result_301990112_Idx, x_301990113) { + addChars_301990086(result_301990112, result_301990112_Idx, ((x_301990113) + "")); + + +} + +function addInt_301990129(result_301990130, result_301990130_Idx, x_301990131) { + addInt_301990111(result_301990130, result_301990130_Idx, BigInt(x_301990131)); + + +} + +function HEX24_385875976(x_385875977) { + var result_385875978 = [[]]; + + addInt_301990129(result_385875978, 0, x_385875977); + + return result_385875978[0]; + +} + +function isFatPointer_33557259(ti_33557260) { + var result_33557261 = false; + + BeforeRet: { + result_33557261 = !((ConstSet1[ti_33557260.base.kind] != undefined)); + break BeforeRet; + }; + + return result_33557261; + +} + +function nimCopyAux(dest_33557272, src_33557273, n_33557274) { + switch (n_33557274.kind) { + case 0: + break; + case 1: + dest_33557272[n_33557274.offset] = nimCopy(dest_33557272[n_33557274.offset], src_33557273[n_33557274.offset], n_33557274.typ); + + break; + case 2: + for (var i = 0; i < n_33557274.sons.length; i++) { + nimCopyAux(dest_33557272, src_33557273, n_33557274.sons[i]); + } + + break; + case 3: + dest_33557272[n_33557274.offset] = nimCopy(dest_33557272[n_33557274.offset], src_33557273[n_33557274.offset], n_33557274.typ); + for (var i = 0; i < n_33557274.sons.length; ++i) { + nimCopyAux(dest_33557272, src_33557273, n_33557274.sons[i][1]); + } + + break; + } + + +} + +function raiseIndexError(i_33556812, a_33556813, b_33556814) { + var Temporary1; + + if ((b_33556814 < a_33556813)) { + Temporary1 = [105,110,100,101,120,32,111,117,116,32,111,102,32,98,111,117,110,100,115,44,32,116,104,101,32,99,111,110,116,97,105,110,101,114,32,105,115,32,101,109,112,116,121]; + } + else { + Temporary1 = ([105,110,100,101,120,32] || []).concat(HEX24_385875976(i_33556812) || [],[32,110,111,116,32,105,110,32] || [],HEX24_385875976(a_33556813) || [],[32,46,46,32] || [],HEX24_385875976(b_33556814) || []); + } + + raiseException({message: nimCopy(null, Temporary1, NTI33554449), parent: null, m_type: NTI134217749, name: null, trace: [], up: null}, "IndexDefect"); + + +} + +function sysFatal_268435501(message_268435504) { + raiseException({message: nimCopy(null, message_268435504, NTI33554449), m_type: NTI134217745, parent: null, name: null, trace: [], up: null}, "AssertionDefect"); + + +} + +function raiseAssert_268435499(msg_268435500) { + sysFatal_268435501(msg_268435500); + + +} + +function failedAssertImpl_268435541(msg_268435542) { + raiseAssert_268435499(msg_268435542); + + +} + +function onDOMLoaded(e_570425385) { + +function HEX3Aanonymous_570425409(event_570425410) { + event_570425410.target.parentNode.style.display = "none"; + event_570425410.target.parentNode.nextSibling.style.display = "inline"; + + + } + + document.getElementById("theme-select").value = window.localStorage.getItem("theme"); + Label1: { + var pragmaDots_570425408 = null; + var colontmp__570426534 = []; + colontmp__570426534 = document.getElementsByClassName("pragmadots"); + var i_570426536 = 0; + var L_570426537 = (colontmp__570426534).length; + Label2: { + Label3: while (true) { + if (!(i_570426536 < L_570426537)) break Label3; + pragmaDots_570425408 = colontmp__570426534[chckIndx(i_570426536, 0, (colontmp__570426534).length - 1)]; + pragmaDots_570425408.onclick = HEX3Aanonymous_570425409; + i_570426536 = addInt(i_570426536, 1); + if (!(((colontmp__570426534).length == L_570426537))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + + +} + +function isWhitespace_570425752(x_570425753) { + var result_570425754 = false; + + result_570425754 = (((x_570425753.nodeName == "#text") && !/\S/.test(x_570425753.textContent)) || (x_570425753.nodeName == "#comment")); + + return result_570425754; + +} + +function toToc_570425755(x_570425756, father_570425757) { + var Temporary5; + var Temporary6; + var Temporary7; + var Temporary8; + var Temporary15; + + if ((x_570425756.nodeName == "UL")) { + var f_570425765 = {heading: null, kids: [], sortId: (father_570425757.kids).length, doSort: false}; + var i_570425766 = 0; + Label1: { + Label2: while (true) { + if (!(i_570425766 < x_570425756.childNodes.length)) break Label2; + var nxt_570425767 = addInt(i_570425766, 1); + Label3: { + Label4: while (true) { + if (!(nxt_570425767 < x_570425756.childNodes.length)) Temporary5 = false; else { Temporary5 = isWhitespace_570425752(x_570425756.childNodes[nxt_570425767]); } if (!Temporary5) break Label4; + nxt_570425767 = addInt(nxt_570425767, 1); + } + }; + if (!(nxt_570425767 < x_570425756.childNodes.length)) Temporary8 = false; else { Temporary8 = (x_570425756.childNodes[i_570425766].nodeName == "LI"); } if (!Temporary8) Temporary7 = false; else { Temporary7 = (x_570425756.childNodes[i_570425766].childNodes.length == 1); } if (!Temporary7) Temporary6 = false; else { Temporary6 = (x_570425756.childNodes[nxt_570425767].nodeName == "UL"); } if (Temporary6) { + var e_570425780 = {heading: x_570425756.childNodes[i_570425766].childNodes[0], kids: [], sortId: (f_570425765.kids).length, doSort: false}; + var it_570425781 = x_570425756.childNodes[nxt_570425767]; + Label9: { + var j_570425786 = 0; + var colontmp__570426550 = 0; + colontmp__570426550 = it_570425781.childNodes.length; + var i_570426551 = 0; + Label10: { + Label11: while (true) { + if (!(i_570426551 < colontmp__570426550)) break Label11; + j_570425786 = i_570426551; + toToc_570425755(it_570425781.childNodes[j_570425786], e_570425780); + i_570426551 = addInt(i_570426551, 1); + } + }; + }; + f_570425765.kids.push(e_570425780);; + i_570425766 = addInt(nxt_570425767, 1); + } + else { + toToc_570425755(x_570425756.childNodes[i_570425766], f_570425765); + i_570425766 = addInt(i_570425766, 1); + } + + } + }; + father_570425757.kids.push(f_570425765);; + } + else { + if (isWhitespace_570425752(x_570425756)) { + } + else { + if ((x_570425756.nodeName == "LI")) { + var idx_570425804 = []; + Label12: { + var i_570425809 = 0; + var colontmp__570426554 = 0; + colontmp__570426554 = x_570425756.childNodes.length; + var i_570426555 = 0; + Label13: { + Label14: while (true) { + if (!(i_570426555 < colontmp__570426554)) break Label14; + i_570425809 = i_570426555; + if (!(isWhitespace_570425752(x_570425756.childNodes[i_570425809]))) { + idx_570425804.push(i_570425809);; + } + + i_570426555 = addInt(i_570426555, 1); + } + }; + }; + if (!((idx_570425804).length == 2)) Temporary15 = false; else { Temporary15 = (x_570425756.childNodes[idx_570425804[chckIndx(1, 0, (idx_570425804).length - 1)]].nodeName == "UL"); } if (Temporary15) { + var e_570425825 = {heading: x_570425756.childNodes[idx_570425804[chckIndx(0, 0, (idx_570425804).length - 1)]], kids: [], sortId: (father_570425757.kids).length, doSort: false}; + var it_570425826 = x_570425756.childNodes[idx_570425804[chckIndx(1, 0, (idx_570425804).length - 1)]]; + Label16: { + var j_570425831 = 0; + var colontmp__570426558 = 0; + colontmp__570426558 = it_570425826.childNodes.length; + var i_570426559 = 0; + Label17: { + Label18: while (true) { + if (!(i_570426559 < colontmp__570426558)) break Label18; + j_570425831 = i_570426559; + toToc_570425755(it_570425826.childNodes[j_570425831], e_570425825); + i_570426559 = addInt(i_570426559, 1); + } + }; + }; + father_570425757.kids.push(e_570425825);; + } + else { + Label19: { + var i_570425840 = 0; + var colontmp__570426562 = 0; + colontmp__570426562 = x_570425756.childNodes.length; + var i_570426563 = 0; + Label20: { + Label21: while (true) { + if (!(i_570426563 < colontmp__570426562)) break Label21; + i_570425840 = i_570426563; + toToc_570425755(x_570425756.childNodes[i_570425840], father_570425757); + i_570426563 = addInt(i_570426563, 1); + } + }; + }; + } + + } + else { + father_570425757.kids.push({heading: x_570425756, kids: [], sortId: (father_570425757.kids).length, doSort: false});; + } + }} + + +} + +function extractItems_570425543(x_570425544, heading_570425545, items_570425546, items_570425546_Idx) { + BeforeRet: { + if ((x_570425544 == null)) { + break BeforeRet; + } + + if ((!((x_570425544.heading == null)) && (x_570425544.heading.textContent == heading_570425545))) { + Label1: { + var i_570425563 = 0; + var colontmp__570426566 = 0; + colontmp__570426566 = (x_570425544.kids).length; + var i_570426567 = 0; + Label2: { + Label3: while (true) { + if (!(i_570426567 < colontmp__570426566)) break Label3; + i_570425563 = i_570426567; + items_570425546[items_570425546_Idx].push(x_570425544.kids[chckIndx(i_570425563, 0, (x_570425544.kids).length - 1)].heading);; + i_570426567 = addInt(i_570426567, 1); + } + }; + }; + } + else { + Label4: { + var k_570425589 = null; + var i_570426571 = 0; + var L_570426572 = (x_570425544.kids).length; + Label5: { + Label6: while (true) { + if (!(i_570426571 < L_570426572)) break Label6; + k_570425589 = x_570425544.kids[chckIndx(i_570426571, 0, (x_570425544.kids).length - 1)]; + extractItems_570425543(k_570425589, heading_570425545, items_570425546, items_570425546_Idx); + i_570426571 = addInt(i_570426571, 1); + if (!(((x_570425544.kids).length == L_570426572))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + } + + }; + + +} + +function tree_570425474(tag_570425475, kids_570425476) { + var result_570425477 = null; + + result_570425477 = document.createElement(tag_570425475); + Label1: { + var k_570425491 = null; + var i_570426584 = 0; + Label2: { + Label3: while (true) { + if (!(i_570426584 < (kids_570425476).length)) break Label3; + k_570425491 = kids_570425476[chckIndx(i_570426584, 0, (kids_570425476).length - 1)]; + result_570425477.appendChild(k_570425491); + i_570426584 = addInt(i_570426584, 1); + } + }; + }; + + return result_570425477; + +} + +function text_570425499(s_570425500) { + var result_570425501 = null; + + result_570425501 = document.createTextNode(s_570425500); + + return result_570425501; + +} + +function uncovered_570425944(x_570425945) { + var Temporary1; + + var result_570425946 = null; + + BeforeRet: { + if ((((x_570425945.kids).length == 0) && !((x_570425945.heading == null)))) { + if (!(x_570425945.heading.hasOwnProperty('__karaxMarker__'))) { + Temporary1 = x_570425945; + } + else { + Temporary1 = null; + } + + result_570425946 = Temporary1; + break BeforeRet; + } + + result_570425946 = {heading: x_570425945.heading, kids: [], sortId: x_570425945.sortId, doSort: x_570425945.doSort}; + Label2: { + var k_570425961 = null; + var i_570426591 = 0; + var L_570426592 = (x_570425945.kids).length; + Label3: { + Label4: while (true) { + if (!(i_570426591 < L_570426592)) break Label4; + k_570425961 = x_570425945.kids[chckIndx(i_570426591, 0, (x_570425945.kids).length - 1)]; + var y_570425962 = uncovered_570425944(k_570425961); + if (!((y_570425962 == null))) { + result_570425946.kids.push(y_570425962);; + } + + i_570426591 = addInt(i_570426591, 1); + if (!(((x_570425945.kids).length == L_570426592))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + if (((result_570425946.kids).length == 0)) { + result_570425946 = null; + } + + }; + + return result_570425946; + +} + +function mergeTocs_570425974(orig_570425975, news_570425976) { + var result_570425977 = null; + + result_570425977 = uncovered_570425944(orig_570425975); + if ((result_570425977 == null)) { + result_570425977 = news_570425976; + } + else { + Label1: { + var i_570425989 = 0; + var colontmp__570426587 = 0; + colontmp__570426587 = (news_570425976.kids).length; + var i_570426588 = 0; + Label2: { + Label3: while (true) { + if (!(i_570426588 < colontmp__570426587)) break Label3; + i_570425989 = i_570426588; + result_570425977.kids.push(news_570425976.kids[chckIndx(i_570425989, 0, (news_570425976.kids).length - 1)]);; + i_570426588 = addInt(i_570426588, 1); + } + }; + }; + } + + + return result_570425977; + +} + +function buildToc_570425994(orig_570425995, types_570425996, procs_570425997) { + var result_570425998 = null; + + var newStuff_570426003 = {heading: null, kids: [], doSort: true, sortId: 0}; + Label1: { + var t_570426007 = null; + var i_570426579 = 0; + var L_570426580 = (types_570425996).length; + Label2: { + Label3: while (true) { + if (!(i_570426579 < L_570426580)) break Label3; + t_570426007 = types_570425996[chckIndx(i_570426579, 0, (types_570425996).length - 1)]; + var c_570426012 = {heading: t_570426007.cloneNode(true), kids: [], doSort: true, sortId: 0}; + t_570426007.__karaxMarker__ = true; + Label4: { + var p_570426016 = null; + var i_570426576 = 0; + var L_570426577 = (procs_570425997).length; + Label5: { + Label6: while (true) { + if (!(i_570426576 < L_570426577)) break Label6; + p_570426016 = procs_570425997[chckIndx(i_570426576, 0, (procs_570425997).length - 1)]; + if (!(p_570426016.hasOwnProperty('__karaxMarker__'))) { + var xx_570426017 = p_570426016.parentNode.getElementsByClassName("attachedType"); + if ((((xx_570426017).length == 1) && (xx_570426017[chckIndx(0, 0, (xx_570426017).length - 1)].textContent == t_570426007.textContent))) { + var q_570426022 = tree_570425474("A", [text_570425499(p_570426016.title)]); + q_570426022.setAttribute("href", p_570426016.getAttribute("href")); + c_570426012.kids.push({heading: q_570426022, kids: [], sortId: 0, doSort: false});; + p_570426016.__karaxMarker__ = true; + } + + } + + i_570426576 = addInt(i_570426576, 1); + if (!(((procs_570425997).length == L_570426577))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + newStuff_570426003.kids.push(c_570426012);; + i_570426579 = addInt(i_570426579, 1); + if (!(((types_570425996).length == L_570426580))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + result_570425998 = mergeTocs_570425974(orig_570425995, newStuff_570426003); + + return result_570425998; + +} + +function add_570425492(parent_570425493, kid_570425494) { + if (((parent_570425493.nodeName == "TR") && ((kid_570425494.nodeName == "TD") || (kid_570425494.nodeName == "TH")))) { + var k_570425495 = document.createElement("TD"); + k_570425495.appendChild(kid_570425494); + parent_570425493.appendChild(k_570425495); + } + else { + parent_570425493.appendChild(kid_570425494); + } + + + +} + +function setClass_570425496(e_570425497, value_570425498) { + e_570425497.setAttribute("class", value_570425498); + + +} + +function toHtml_570425622(x_570425623, isRoot_570425624) { + +function HEX3Aanonymous_570425642(a_570425643, b_570425644) { + var result_570425645 = 0; + + BeforeRet: { + if ((!((a_570425643.heading == null)) && !((b_570425644.heading == null)))) { + var x_570425654 = a_570425643.heading.textContent; + var y_570425655 = b_570425644.heading.textContent; + if ((x_570425654 < y_570425655)) { + result_570425645 = (-1); + break BeforeRet; + } + + if ((y_570425655 < x_570425654)) { + result_570425645 = 1; + break BeforeRet; + } + + result_570425645 = 0; + break BeforeRet; + } + else { + result_570425645 = subInt(a_570425643.sortId, b_570425644.sortId); + break BeforeRet; + } + + }; + + return result_570425645; + + } + + var result_570425625 = null; + + BeforeRet: { + if ((x_570425623 == null)) { + result_570425625 = null; + break BeforeRet; + } + + if (((x_570425623.kids).length == 0)) { + if ((x_570425623.heading == null)) { + result_570425625 = null; + break BeforeRet; + } + + result_570425625 = x_570425623.heading.cloneNode(true); + break BeforeRet; + } + + result_570425625 = tree_570425474("DIV", []); + if ((!((x_570425623.heading == null)) && !(x_570425623.heading.hasOwnProperty('__karaxMarker__')))) { + add_570425492(result_570425625, x_570425623.heading.cloneNode(true)); + } + + var ul_570425641 = tree_570425474("UL", []); + if (isRoot_570425624) { + setClass_570425496(ul_570425641, "simple simple-toc"); + } + else { + setClass_570425496(ul_570425641, "simple"); + } + + if (x_570425623.doSort) { + x_570425623.kids.sort(HEX3Aanonymous_570425642); + } + + Label1: { + var k_570425667 = null; + var i_570426595 = 0; + var L_570426596 = (x_570425623.kids).length; + Label2: { + Label3: while (true) { + if (!(i_570426595 < L_570426596)) break Label3; + k_570425667 = x_570425623.kids[chckIndx(i_570426595, 0, (x_570425623.kids).length - 1)]; + var y_570425668 = toHtml_570425622(k_570425667, false); + if (!((y_570425668 == null))) { + add_570425492(ul_570425641, tree_570425474("LI", [y_570425668])); + } + + i_570426595 = addInt(i_570426595, 1); + if (!(((x_570425623.kids).length == L_570426596))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + if (!((ul_570425641.childNodes.length == 0))) { + add_570425492(result_570425625, ul_570425641); + } + + if ((result_570425625.childNodes.length == 0)) { + result_570425625 = null; + } + + }; + + return result_570425625; + +} + +function replaceById_570425502(id_570425503, newTree_570425504) { + var x_570425505 = document.getElementById(id_570425503); + x_570425505.parentNode.replaceChild(newTree_570425504, x_570425505); + newTree_570425504.id = id_570425503; + + +} + +function togglevis_570426052(d_570426053) { + if ((d_570426053.style.display == "none")) { + d_570426053.style.display = "inline"; + } + else { + d_570426053.style.display = "none"; + } + + + +} + +function groupBy(value_570426055) { + var toc_570426056 = document.getElementById("toc-list"); + if ((alternative_570426051[0] == null)) { + var tt_570426064 = {heading: null, kids: [], sortId: 0, doSort: false}; + toToc_570425755(toc_570426056, tt_570426064); + tt_570426064 = tt_570426064.kids[chckIndx(0, 0, (tt_570426064.kids).length - 1)]; + var types_570426069 = [[]]; + var procs_570426074 = [[]]; + extractItems_570425543(tt_570426064, "Types", types_570426069, 0); + extractItems_570425543(tt_570426064, "Procs", procs_570426074, 0); + extractItems_570425543(tt_570426064, "Converters", procs_570426074, 0); + extractItems_570425543(tt_570426064, "Methods", procs_570426074, 0); + extractItems_570425543(tt_570426064, "Templates", procs_570426074, 0); + extractItems_570425543(tt_570426064, "Macros", procs_570426074, 0); + extractItems_570425543(tt_570426064, "Iterators", procs_570426074, 0); + var ntoc_570426075 = buildToc_570425994(tt_570426064, types_570426069[0], procs_570426074[0]); + var x_570426076 = toHtml_570425622(ntoc_570426075, true); + alternative_570426051[0] = tree_570425474("DIV", [x_570426076]); + } + + if ((value_570426055 == "type")) { + replaceById_570425502("tocRoot", alternative_570426051[0]); + } + else { + replaceById_570425502("tocRoot", tree_570425474("DIV", [])); + } + + togglevis_570426052(document.getElementById("toc-list")); + + +} + +function HEX5BHEX5D_738198811(s_738198814, x_738198815) { + var result_738198816 = []; + + var a_738198818 = x_738198815.a; + var L_738198820 = addInt(subInt(subInt((s_738198814).length, x_738198815.b), a_738198818), 1); + result_738198816 = nimCopy(null, mnewString(chckRange(L_738198820, 0, 2147483647)), NTI33554449); + Label1: { + var i_738198825 = 0; + var i_570426605 = 0; + Label2: { + Label3: while (true) { + if (!(i_570426605 < L_738198820)) break Label3; + i_738198825 = i_570426605; + result_738198816[chckIndx(i_738198825, 0, (result_738198816).length - 1)] = s_738198814[chckIndx(addInt(i_738198825, a_738198818), 0, (s_738198814).length - 1)]; + i_570426605 = addInt(i_570426605, 1); + } + }; + }; + + return result_738198816; + +} + +function HEX2EHEX2E_973078632(a_973078635, b_973078636) { + var result_973078639 = ({a: 0, b: 0}); + + result_973078639 = nimCopy(result_973078639, {a: a_973078635, b: b_973078636}, NTI973078613); + + return result_973078639; + +} +async function loadIndex_570426270() { + var result_570426272 = null; + + BeforeRet: { + var indexURL_570426278 = document.getElementById("indexLink").getAttribute("href"); + var rootURL_570426304 = HEX5BHEX5D_738198811(cstrToNimstr(indexURL_570426278), HEX2EHEX2E_973078632(0, 14)); + var resp_570426316 = (await (await fetch(indexURL_570426278)).text()); + var indexElem_570426317 = document.createElement("div"); + indexElem_570426317.innerHTML = resp_570426316; + Label1: { + var href_570426339 = null; + var colontmp__570426599 = []; + colontmp__570426599 = indexElem_570426317.getElementsByClassName("reference"); + var i_570426601 = 0; + var L_570426602 = (colontmp__570426599).length; + Label2: { + Label3: while (true) { + if (!(i_570426601 < L_570426602)) break Label3; + href_570426339 = colontmp__570426599[chckIndx(i_570426601, 0, (colontmp__570426599).length - 1)]; + href_570426339.setAttribute("href", toJSStr((rootURL_570426304 || []).concat(cstrToNimstr(href_570426339.getAttribute("href")) || []))); + db_570426093[0].push(href_570426339);; + contents_570426094[0].push(href_570426339.getAttribute("data-doc-search-tag"));; + i_570426601 = addInt(i_570426601, 1); + if (!(((colontmp__570426599).length == L_570426602))) { + failedAssertImpl_268435541(makeNimstrLit("iterators.nim(246, 11) `len(a) == L` the length of the seq changed while iterating over it")); + } + + } + }; + }; + result_570426272 = undefined; + break BeforeRet; + }; + + return result_570426272; + +} + +function then_570426448(future_570426451, onSuccess_570426452, onReject_570426453) { + var result_570426454 = null; + + BeforeRet: { + var ret_570426464 = null; + ret_570426464 = future_570426451.then(onSuccess_570426452, onReject_570426453) + result_570426454 = ret_570426464; + break BeforeRet; + }; + + return result_570426454; + +} + +function nsuToLowerAsciiChar(c_738197589) { + var result_738197590 = 0; + + if ((ConstSet2[c_738197589] != undefined)) { + result_738197590 = (c_738197589 ^ 32); + } + else { + result_738197590 = c_738197589; + } + + + return result_738197590; + +} + +function fuzzyMatch_721420304(pattern_721420305, str_721420306) { + var Temporary4; + var Temporary5; + var Temporary6; + var Temporary7; + var Temporary8; + + var result_721420309 = {Field0: 0, Field1: false}; + + var scoreState_721420310 = (-100); + var headerMatched_721420311 = false; + var unmatchedLeadingCharCount_721420312 = 0; + var consecutiveMatchCount_721420313 = 0; + var strIndex_721420314 = 0; + var patIndex_721420315 = 0; + var score_721420316 = 0; + Label1: { + Label2: while (true) { + if (!((strIndex_721420314 < ((str_721420306) == null ? 0 : (str_721420306).length)) && (patIndex_721420315 < ((pattern_721420305) == null ? 0 : (pattern_721420305).length)))) break Label2; + Label3: { + var patternChar_721420319 = nsuToLowerAsciiChar(pattern_721420305.charCodeAt(chckIndx(patIndex_721420315, 0, (pattern_721420305).length - 1))); + var strChar_721420320 = nsuToLowerAsciiChar(str_721420306.charCodeAt(chckIndx(strIndex_721420314, 0, (str_721420306).length - 1))); + if ((ConstSet3[patternChar_721420319] != undefined)) { + patIndex_721420315 = addInt(patIndex_721420315, 1); + break Label3; + } + + if ((ConstSet4[strChar_721420320] != undefined)) { + strIndex_721420314 = addInt(strIndex_721420314, 1); + break Label3; + } + + if ((!(headerMatched_721420311) && (strChar_721420320 == 58))) { + headerMatched_721420311 = true; + scoreState_721420310 = (-100); + score_721420316 = ((Math.floor((0.5 * score_721420316))) | 0); + patIndex_721420315 = 0; + strIndex_721420314 = addInt(strIndex_721420314, 1); + break Label3; + } + + if ((strChar_721420320 == patternChar_721420319)) { + switch (scoreState_721420310) { + case (-100): + case 20: + scoreState_721420310 = 10; + break; + case 0: + scoreState_721420310 = 5; + score_721420316 = addInt(score_721420316, scoreState_721420310); + break; + case 10: + case 5: + consecutiveMatchCount_721420313 = addInt(consecutiveMatchCount_721420313, 1); + scoreState_721420310 = 5; + score_721420316 = addInt(score_721420316, mulInt(5, consecutiveMatchCount_721420313)); + if ((scoreState_721420310 == 10)) { + score_721420316 = addInt(score_721420316, 10); + } + + var onBoundary_721420372 = (patIndex_721420315 == ((pattern_721420305) == null ? -1 : (pattern_721420305).length - 1)); + if ((!(onBoundary_721420372) && (strIndex_721420314 < ((str_721420306) == null ? -1 : (str_721420306).length - 1)))) { + var nextPatternChar_721420373 = nsuToLowerAsciiChar(pattern_721420305.charCodeAt(chckIndx(addInt(patIndex_721420315, 1), 0, (pattern_721420305).length - 1))); + var nextStrChar_721420374 = nsuToLowerAsciiChar(str_721420306.charCodeAt(chckIndx(addInt(strIndex_721420314, 1), 0, (str_721420306).length - 1))); + if (!!((ConstSet5[nextStrChar_721420374] != undefined))) Temporary4 = false; else { Temporary4 = !((nextStrChar_721420374 == nextPatternChar_721420373)); } onBoundary_721420372 = Temporary4; + } + + if (onBoundary_721420372) { + scoreState_721420310 = 20; + score_721420316 = addInt(score_721420316, scoreState_721420310); + } + + break; + case (-1): + case (-3): + if (!((ConstSet6[str_721420306.charCodeAt(chckIndx(subInt(strIndex_721420314, 1), 0, (str_721420306).length - 1))] != undefined))) Temporary5 = true; else { if (!(ConstSet7[str_721420306.charCodeAt(chckIndx(subInt(strIndex_721420314, 1), 0, (str_721420306).length - 1))] != undefined)) Temporary6 = false; else { Temporary6 = (ConstSet8[str_721420306.charCodeAt(chckIndx(strIndex_721420314, 0, (str_721420306).length - 1))] != undefined); } Temporary5 = Temporary6; } var isLeadingChar_721420398 = Temporary5; + if (isLeadingChar_721420398) { + scoreState_721420310 = 10; + } + else { + scoreState_721420310 = 0; + score_721420316 = addInt(score_721420316, scoreState_721420310); + } + + break; + } + patIndex_721420315 = addInt(patIndex_721420315, 1); + } + else { + switch (scoreState_721420310) { + case (-100): + scoreState_721420310 = (-3); + score_721420316 = addInt(score_721420316, scoreState_721420310); + break; + case 5: + scoreState_721420310 = (-1); + score_721420316 = addInt(score_721420316, scoreState_721420310); + consecutiveMatchCount_721420313 = 0; + break; + case (-3): + if ((unmatchedLeadingCharCount_721420312 < 3)) { + scoreState_721420310 = (-3); + score_721420316 = addInt(score_721420316, scoreState_721420310); + } + + unmatchedLeadingCharCount_721420312 = addInt(unmatchedLeadingCharCount_721420312, 1); + break; + default: + scoreState_721420310 = (-1); + score_721420316 = addInt(score_721420316, scoreState_721420310); + break; + } + } + + strIndex_721420314 = addInt(strIndex_721420314, 1); + }; + } + }; + if (!(patIndex_721420315 == ((pattern_721420305) == null ? 0 : (pattern_721420305).length))) Temporary7 = false; else { if ((strIndex_721420314 == ((str_721420306) == null ? 0 : (str_721420306).length))) Temporary8 = true; else { Temporary8 = !((ConstSet9[str_721420306.charCodeAt(chckIndx(strIndex_721420314, 0, (str_721420306).length - 1))] != undefined)); } Temporary7 = Temporary8; } if (Temporary7) { + score_721420316 = addInt(score_721420316, 10); + } + + var colontmp__570426618 = nimMax(0, score_721420316); + var colontmp__570426619 = (0 < score_721420316); + result_721420309 = nimCopy(result_721420309, {Field0: colontmp__570426618, Field1: colontmp__570426619}, NTI721420302); + + return result_721420309; + +} + +function escapeCString_570426095(x_570426096, x_570426096_Idx) { + var s_570426097 = []; + Label1: { + var c_570426098 = 0; + var iHEX60gensym6_570426622 = 0; + var nHEX60gensym6_570426623 = ((x_570426096[x_570426096_Idx]) == null ? 0 : (x_570426096[x_570426096_Idx]).length); + Label2: { + Label3: while (true) { + if (!(iHEX60gensym6_570426622 < nHEX60gensym6_570426623)) break Label3; + c_570426098 = x_570426096[x_570426096_Idx].charCodeAt(chckIndx(iHEX60gensym6_570426622, 0, (x_570426096[x_570426096_Idx]).length - 1)); + switch (c_570426098) { + case 60: + s_570426097.push.apply(s_570426097, [38,108,116,59]);; + break; + case 62: + s_570426097.push.apply(s_570426097, [38,103,116,59]);; + break; + default: + addChar(s_570426097, c_570426098);; + break; + } + iHEX60gensym6_570426622 = addInt(iHEX60gensym6_570426622, 1); + } + }; + }; + x_570426096[x_570426096_Idx] = toJSStr(s_570426097); + + +} + +function dosearch_570426099(value_570426100) { + +function HEX3Aanonymous_570426127(a_570426132, b_570426133) { + var result_570426138 = 0; + + result_570426138 = subInt(b_570426133["Field1"], a_570426132["Field1"]); + + return result_570426138; + + } + + var result_570426101 = null; + + BeforeRet: { + if (((db_570426093[0]).length == 0)) { + break BeforeRet; + } + + var ul_570426105 = tree_570425474("UL", []); + result_570426101 = tree_570425474("DIV", []); + setClass_570425496(result_570426101, "search_results"); + var matches_570426110 = []; + Label1: { + var i_570426118 = 0; + var colontmp__570426609 = 0; + colontmp__570426609 = (db_570426093[0]).length; + var i_570426610 = 0; + Label2: { + Label3: while (true) { + if (!(i_570426610 < colontmp__570426609)) break Label3; + i_570426118 = i_570426610; + Label4: { + var c_570426119 = contents_570426094[0][chckIndx(i_570426118, 0, (contents_570426094[0]).length - 1)]; + if (((c_570426119 == "Examples") || (c_570426119 == "PEG construction"))) { + break Label4; + } + + var tmpTuple_570426120 = fuzzyMatch_721420304(value_570426100, c_570426119); + var score_570426121 = tmpTuple_570426120["Field0"]; + var matched_570426122 = tmpTuple_570426120["Field1"]; + if (matched_570426122) { + matches_570426110.push({Field0: db_570426093[0][chckIndx(i_570426118, 0, (db_570426093[0]).length - 1)], Field1: score_570426121});; + } + + }; + i_570426610 = addInt(i_570426610, 1); + } + }; + }; + matches_570426110.sort(HEX3Aanonymous_570426127); + Label5: { + var i_570426155 = 0; + var colontmp__570426613 = 0; + colontmp__570426613 = nimMin((matches_570426110).length, 29); + var i_570426614 = 0; + Label6: { + Label7: while (true) { + if (!(i_570426614 < colontmp__570426613)) break Label7; + i_570426155 = i_570426614; + matches_570426110[chckIndx(i_570426155, 0, (matches_570426110).length - 1)]["Field0"].innerHTML = matches_570426110[chckIndx(i_570426155, 0, (matches_570426110).length - 1)]["Field0"].getAttribute("data-doc-search-tag"); + escapeCString_570426095(matches_570426110[chckIndx(i_570426155, 0, (matches_570426110).length - 1)]["Field0"], "innerHTML"); + add_570425492(ul_570426105, tree_570425474("LI", [matches_570426110[chckIndx(i_570426155, 0, (matches_570426110).length - 1)]["Field0"]])); + i_570426614 = addInt(i_570426614, 1); + } + }; + }; + if ((ul_570426105.childNodes.length == 0)) { + add_570425492(result_570426101, tree_570425474("B", [text_570425499("no search results")])); + } + else { + add_570425492(result_570426101, tree_570425474("B", [text_570425499("search results")])); + add_570425492(result_570426101, ul_570426105); + } + + }; + + return result_570426101; + +} + +function search() { + +function wrapper_570426433() { + var elem_570426434 = document.getElementById("searchInput"); + var value_570426435 = elem_570426434.value; + if (!((((value_570426435) == null ? 0 : (value_570426435).length) == 0))) { + if ((oldtoc_570426428[0] == null)) { + oldtoc_570426428[0] = document.getElementById("tocRoot"); + } + + var results_570426439 = dosearch_570426099(value_570426435); + replaceById_570425502("tocRoot", results_570426439); + } + else { + if (!((oldtoc_570426428[0] == null))) { + replaceById_570425502("tocRoot", oldtoc_570426428[0]); + } + } + + + } + + if ((loadIndexFut_570426431[0] == null)) { + loadIndexFut_570426431[0] = loadIndex_570426270(); + var _ = then_570426448(loadIndexFut_570426431[0], wrapper_570426433, null); + } + + if (!((timer_570426429[0] == null))) { + clearTimeout(timer_570426429[0]); + } + + timer_570426429[0] = setTimeout(wrapper_570426433, 400); + + +} + +function copyToClipboard() { + + function updatePreTags() { + + const allPreTags = document.querySelectorAll("pre") + + allPreTags.forEach((e) => { + + const div = document.createElement("div") + div.classList.add("copyToClipBoard") + + const preTag = document.createElement("pre") + preTag.innerHTML = e.innerHTML + + const button = document.createElement("button") + button.value = e.textContent.replace('...', '') + button.classList.add("copyToClipBoardBtn") + button.style.cursor = "pointer" + + div.appendChild(preTag) + div.appendChild(button) + + e.outerHTML = div.outerHTML + + }) + } + + + function copyTextToClipboard(e) { + const clipBoardContent = e.target.value + navigator.clipboard.writeText(clipBoardContent).then(function() { + e.target.style.setProperty("--clipboard-image", "var(--clipboard-image-selected)") + }, function(err) { + console.error("Could not copy text: ", err); + }); + } + + window.addEventListener("click", (e) => { + if (e.target.classList.contains("copyToClipBoardBtn")) { + copyTextToClipboard(e) + } + }) + + window.addEventListener("mouseover", (e) => { + if (e.target.nodeName === "PRE") { + e.target.nextElementSibling.style.setProperty("--clipboard-image", "var(--clipboard-image-normal)") + } + }) + + window.addEventListener("DOMContentLoaded", updatePreTags) + + + + +} +var Temporary1; +var t_570425383 = window.localStorage.getItem("theme"); +if ((t_570425383 == null)) { +Temporary1 = "auto"; +} +else { +Temporary1 = t_570425383; +} + +setTheme(Temporary1); +var alternative_570426051 = [null]; +var db_570426093 = [[]]; +var contents_570426094 = [[]]; +var oldtoc_570426428 = [null]; +var timer_570426429 = [null]; +var loadIndexFut_570426431 = [null]; +copyToClipboard(); +window.addEventListener("DOMContentLoaded", onDOMLoaded, false); diff --git a/traffic-score-tests/libp2p/connmanager.html b/traffic-score-tests/libp2p/connmanager.html new file mode 100644 index 000000000..a502fe67b --- /dev/null +++ b/traffic-score-tests/libp2p/connmanager.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/connmanager + + + + + + + + + + + + +
+
+

libp2p/connmanager

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/crypto/crypto.html b/traffic-score-tests/libp2p/crypto/crypto.html new file mode 100644 index 000000000..b4d9d181f --- /dev/null +++ b/traffic-score-tests/libp2p/crypto/crypto.html @@ -0,0 +1,1542 @@ + + + + + + + +libp2p/crypto/crypto + + + + + + + + + + + + +
+
+

libp2p/crypto/crypto

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements Public Key and Private Key interface for libp2p.Serialization/Deserialization helpers

+ +
+

Types

+
+
+
CryptoError = enum
+  KeyError, SigError, HashError, SchemeError
+
+ + +Source   +Edit   + +
+
+
+
CryptoResult[T] = Result[T, CryptoError]
+
+ + +Source   +Edit   + +
+
+
+
DigestSheme = enum
+  Sha256, Sha512
+
+ + +Source   +Edit   + +
+
+
+
KeyPair = object
+  seckey*: PrivateKey
+  pubkey*: PublicKey
+
+
+ + +Source   +Edit   + +
+
+
+
PKScheme = enum
+  RSA = 0, Ed25519, Secp256k1, ECDSA
+
+ + +Source   +Edit   + +
+
+
+
PrivateKey = object
+  case scheme*: PKScheme
+  of PKScheme.RSA:
+      when supported(PKScheme.RSA):
+          rsakey*: rsa.RsaPrivateKey
+
+      else:
+          nil
+
+    
+  of PKScheme.Ed25519:
+      when supported(PKScheme.Ed25519):
+          edkey*: EdPrivateKey
+
+      else:
+          nil
+
+    
+  of PKScheme.Secp256k1:
+      when supported(PKScheme.Secp256k1):
+          skkey*: SkPrivateKey
+
+      else:
+          nil
+
+    
+  of PKScheme.ECDSA:
+      when supported(PKScheme.ECDSA):
+          eckey*: ecnist.EcPrivateKey
+
+      else:
+          nil
+
+    
+  
+
+ + +Source   +Edit   + +
+
+
+
PublicKey = object
+  case scheme*: PKScheme
+  of PKScheme.RSA:
+      when PKScheme.RSA in SupportedSchemes:
+          rsakey*: rsa.RsaPublicKey
+
+      else:
+          nil
+
+    
+  of PKScheme.Ed25519:
+      when supported(PKScheme.Ed25519):
+          edkey*: EdPublicKey
+
+      else:
+          nil
+
+    
+  of PKScheme.Secp256k1:
+      when supported(PKScheme.Secp256k1):
+          skkey*: SkPublicKey
+
+      else:
+          nil
+
+    
+  of PKScheme.ECDSA:
+      when supported(PKScheme.ECDSA):
+          eckey*: ecnist.EcPublicKey
+
+      else:
+          nil
+
+    
+  
+
+ + +Source   +Edit   + +
+
+
+
Secret = object
+  ivsize*: int
+  keysize*: int
+  macsize*: int
+  data*: seq[byte]
+
+
+ + +Source   +Edit   + +
+
+
+
Signature = object
+  data*: seq[byte]
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
libp2p_pki_schemes {.strdefine.} = "rsa,ed25519,secp256k1,ecnist"
+
+ + +Source   +Edit   + +
+
+
+
RsaDefaultKeySize = 3072
+
+ + +Source   +Edit   + +
+
+
+
SupportedSchemes = {RSA, Ed25519, Secp256k1, ECDSA}
+
+ + +Source   +Edit   + +
+
+
+
SupportedSchemesInt = {0, 1, 2, 3}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(key: PrivateKey | PublicKey): string {....raises: [].}
+
+ +Get string representation of private/public key key. +Source   +Edit   + +
+
+
+
proc `$`(sig: Signature): string {....raises: [], tags: [], forbids: [].}
+
+ +Get string representation of signature sig. +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(key1, key2: PrivateKey): bool {....raises: [], tags: [], forbids: [].}
+
+ +Return true if two private keys key1 and key2 of the same scheme and equal. +Source   +Edit   + +
+
+
+
proc `==`(key1, key2: PublicKey): bool {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Return true if two public keys key1 and key2 of the same scheme and equal. +Source   +Edit   + +
+
+ +
+
+
+
proc createExchange(epubkey, signature: openArray[byte]): seq[byte] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Create SecIO exchange message using ephemeral public key epubkey and signature of proposal blocks signature. +Source   +Edit   + +
+
+ +
+
+
+
proc createProposal(nonce, pubkey: openArray[byte];
+                    exchanges, ciphers, hashes: string): seq[byte] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Create SecIO proposal message using random nonce, local public key pubkey, comma-delimieted list of supported exchange schemes exchanges, comma-delimeted list of supported ciphers ciphers and comma-delimeted list of supported hashes hashes. +Source   +Edit   + +
+
+ +
+
+
+
proc decodeExchange(message: seq[byte]; pubkey, signature: var seq[byte]): bool {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Parse incoming exchange message and decode remote ephemeral public key pubkey and signature signature.

+

Procedure returns true on success and false on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc decodeProposal(message: seq[byte]; nonce, pubkey: var seq[byte];
+                    exchanges, ciphers, hashes: var string): bool {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Parse incoming proposal message and decode remote random nonce nonce, remote public key pubkey, comma-delimieted list of supported exchange schemes exchanges, comma-delimeted list of supported ciphers ciphers and comma-delimeted list of supported hashes hashes.

+

Procedure returns true on success and false on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc getBytes(key: PrivateKey): CryptoResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Return private key key in binary form (using libp2p's protobuf serialization). +Source   +Edit   + +
+
+
+
proc getBytes(key: PublicKey): CryptoResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Return public key key in binary form (using libp2p's protobuf serialization). +Source   +Edit   + +
+
+
+
proc getBytes(sig: Signature): seq[byte] {....raises: [], tags: [], forbids: [].}
+
+ +Return signature sig in binary form. +Source   +Edit   + +
+
+ +
+
+
+
proc getField(pb: ProtoBuffer; field: int; value: var Signature): ProtoResult[
+    bool] {....raises: [], tags: [], forbids: [].}
+
+ +

Deserialize signature from protobuf's message pb using field index field.

+

On success deserialized signature will be stored in value.

+ +Source   +Edit   + +
+
+
+
proc getField[T: PublicKey | PrivateKey](pb: ProtoBuffer; field: int;
+    value: var T): ProtoResult[bool] {....raises: [].}
+
+ +

Deserialize public/private key from protobuf's message pb using field index field.

+

On success deserialized key will be stored in value.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc getOrder(remotePubkey, localNonce: openArray[byte];
+              localPubkey, remoteNonce: openArray[byte]): CryptoResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Compare values and calculate order parameter. +Source   +Edit   + +
+
+ +
+
+
+
proc getPublicKey(key: PrivateKey): CryptoResult[PublicKey] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Get public key from corresponding private key key. +Source   +Edit   + +
+
+ +
+
+
+
proc getRawBytes(key: PrivateKey | PublicKey): CryptoResult[seq[byte]] {.
+    ...raises: [].}
+
+ +Return private key key in binary form (using scheme's own serialization). +Source   +Edit   + +
+
+ +
+
+
+
proc init(key: var PrivateKey; data: openArray[byte]): bool {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(key: var PublicKey; data: openArray[byte]): bool {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(sig: var Signature; data: openArray[byte]): bool {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Initialize signature sig from raw binary form.

+

Returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(sig: var Signature; data: string): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ +

Initialize signature sig from serialized hexadecimal string representation.

+

Returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PrivateKey]; data: openArray[byte]): CryptoResult[
+    PrivateKey] {....raises: [].}
+
+ +Create new private key from libp2p's protobuf serialized binary form. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PrivateKey]; data: string): CryptoResult[PrivateKey] {.
+    ...raises: [].}
+
+ +Create new private key from libp2p's protobuf serialized hexadecimal string form. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PrivateKey]; key: ecnist.EcPrivateKey): PrivateKey {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PrivateKey]; key: EdPrivateKey): PrivateKey {....raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PrivateKey]; key: rsa.RsaPrivateKey): PrivateKey {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PrivateKey]; key: SkPrivateKey): PrivateKey {....raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PublicKey]; data: openArray[byte]): CryptoResult[PublicKey] {.
+    ...raises: [].}
+
+ +Create new public key from libp2p's protobuf serialized binary form. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PublicKey]; data: string): CryptoResult[PublicKey] {.
+    ...raises: [].}
+
+ +Create new public key from libp2p's protobuf serialized hexadecimal string form. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PublicKey]; key: ecnist.EcPublicKey): PublicKey {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PublicKey]; key: EdPublicKey): PublicKey {....raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PublicKey]; key: rsa.RsaPublicKey): PublicKey {....raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[PublicKey]; key: SkPublicKey): PublicKey {....raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init(t: typedesc[Signature]; data: openArray[byte]): CryptoResult[Signature] {.
+    ...raises: [].}
+
+ +Create new public key from libp2p's protobuf serialized binary form. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[Signature]; data: string): CryptoResult[Signature] {.
+    ...raises: [].}
+
+ +Create new signature from serialized hexadecimal string form. +Source   +Edit   + +
+
+
+
proc init[T: PrivateKey | PublicKey](key: var T; data: string): bool {.
+    ...raises: [].}
+
+ +

Initialize private/public key key from libp2p's protobuf serialized hexadecimal string representation.

+

Returns true on success.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc iv(secret: Secret; id: int): seq[byte] {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Get array of bytes with with initial vector. +Source   +Edit   + +
+
+ +
+
+
+
proc key(secret: Secret; id: int): seq[byte] {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc mac(secret: Secret; id: int): seq[byte] {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc newRng(): ref HmacDrbgContext {....raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc random(T: typedesc[KeyPair]; rng: var HmacDrbgContext;
+            bits = RsaDefaultKeySize): CryptoResult[KeyPair] {....raises: [].}
+
+ +

Generate random private pair of keys using default public-key cryptography scheme.

+

Default public-key cryptography schemes are following order: ed25519, secp256k1, RSA, secp256r1.

+

So will be used first available (supported) method.

+ +Source   +Edit   + +
+
+
+
proc random(T: typedesc[KeyPair]; scheme: PKScheme; rng: var HmacDrbgContext;
+            bits = RsaDefaultKeySize): CryptoResult[KeyPair] {....raises: [].}
+
+ +

Generate random key pair for scheme scheme.

+

bits is number of bits for RSA key, bits value must be in 512, 4096, default value is 2048 bits.

+ +Source   +Edit   + +
+
+
+
proc random(T: typedesc[PrivateKey]; rng: var HmacDrbgContext;
+            bits = RsaDefaultKeySize): CryptoResult[PrivateKey] {....raises: [].}
+
+ +

Generate random private key using default public-key cryptography scheme.

+

Default public-key cryptography schemes are following order: ed25519, secp256k1, RSA, secp256r1.

+

So will be used first available (supported) method.

+ +Source   +Edit   + +
+
+
+
proc random(T: typedesc[PrivateKey]; scheme: PKScheme; rng: var HmacDrbgContext;
+            bits = RsaDefaultKeySize): CryptoResult[PrivateKey] {....raises: [].}
+
+ +

Generate random private key for scheme scheme.

+

bits is number of bits for RSA key, bits value must be in 2048, 4096, default value is 3072 bits.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc selectBest(order: int; p1, p2: string): string {....raises: [], tags: [],
+    forbids: [].}
+
+ +

Determines which algorithm to use from list p1 and p2.

+

Returns empty string if there no algorithms in common.

+ +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(key: PrivateKey | PublicKey): string {....raises: [].}
+
+ +Get short string representation of private/public key key. +Source   +Edit   + +
+
+ +
+
+
+
proc shuffle[T](rng: ref HmacDrbgContext; x: var openArray[T]) {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc sign(key: PrivateKey; data: openArray[byte]): CryptoResult[Signature] {.
+    ...gcsafe, raises: [], tags: [RootEffect], forbids: [].}
+
+ +Sign message data using private key key and return generated signature in raw binary form. +Source   +Edit   + +
+
+ +
+
+
+
proc stretchKeys(cipherType: string; hashType: string; sharedSecret: seq[byte]): Secret {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Expand shared secret to cryptographic keys. +Source   +Edit   + +
+
+ +
+
+
+
proc toBytes(key: PrivateKey; data: var openArray[byte]): CryptoResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize private key key (using libp2p protobuf scheme) and store it to data.

+

Returns number of bytes (octets) needed to store private key key.

+ +Source   +Edit   + +
+
+
+
proc toBytes(key: PublicKey; data: var openArray[byte]): CryptoResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize public key key (using libp2p protobuf scheme) and store it to data.

+

Returns number of bytes (octets) needed to store public key key.

+ +Source   +Edit   + +
+
+
+
proc toBytes(sig: Signature; data: var openArray[byte]): int {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Serialize signature sig and store it to data.

+

Returns number of bytes (octets) needed to store signature sig.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc toRawBytes(key: PrivateKey | PublicKey; data: var openArray[byte]): CryptoResult[
+    int] {....raises: [].}
+
+ +

Serialize private key key (using scheme's own serialization) and store it to data.

+

Returns number of bytes (octets) needed to store private key key.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc verify(sig: Signature; message: openArray[byte]; key: PublicKey): bool {.
+    ...raises: [], tags: [RootEffect], forbids: [].}
+
+ +Verify signature sig using message message and public key key. Return true if message signature is valid. +Source   +Edit   + +
+
+ +
+
+
+
proc write(pb: var ProtoBuffer; field: int; sig: Signature) {.inline,
+    ...raises: [], raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc write(vb: var VBuffer; pubkey: PublicKey) {.inline,
+    ...raises: [ResultError[CryptoError]], raises: [], tags: [], forbids: [].}
+
+ +Write PublicKey value pubkey to buffer vb. +Source   +Edit   + +
+
+
+
proc write(vb: var VBuffer; seckey: PrivateKey) {.inline,
+    ...raises: [ResultError[CryptoError]], raises: [], tags: [], forbids: [].}
+
+ +Write PrivateKey value seckey to buffer vb. +Source   +Edit   + +
+
+
+
proc write(vb: var VBuffer; sig: PrivateKey) {.inline,
+    ...raises: [ResultError[CryptoError]], raises: [], tags: [], forbids: [].}
+
+ +Write Signature value sig to buffer vb. +Source   +Edit   + +
+
+
+
proc write[T: PublicKey | PrivateKey](pb: var ProtoBuffer; field: int; key: T) {.
+    inline, ...raises: [ResultError[CryptoError]], raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template goffset(secret, id, o: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template ivOpenArray(secret: Secret; id: int): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template keyOpenArray(secret: Secret; id: int): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template macOpenArray(secret: Secret; id: int): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template orError(exp: untyped; err: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template supported(scheme: PKScheme): bool
+
+ +Returns true if specified scheme is currently available. +Source   +Edit   + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/crypto/ecnist.html b/traffic-score-tests/libp2p/crypto/ecnist.html new file mode 100644 index 000000000..e40261942 --- /dev/null +++ b/traffic-score-tests/libp2p/crypto/ecnist.html @@ -0,0 +1,1270 @@ + + + + + + + +libp2p/crypto/ecnist + + + + + + + + + + + + +
+
+

libp2p/crypto/ecnist

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements constant-time ECDSA and ECDHE for NIST elliptic curves secp256r1, secp384r1 and secp521r1.

+

This module uses unmodified parts of code from BearSSL library <https://bearssl.org/> Copyright(C) 2018 Thomas Pornin <pornin@bolet.org>.

+

+ +
+

Types

+
+
+
EcCurveKind = enum
+  Secp256r1 = 23, Secp384r1 = 24, Secp521r1 = 25
+
+ + +Source   +Edit   + +
+
+
+
ECDHEScheme = EcCurveKind
+
+ + +Source   +Edit   + +
+
+
+
EcError = enum
+  EcRngError, EcKeyGenError, EcPublicKeyError, EcKeyIncorrectError,
+  EcSignatureError
+
+ + +Source   +Edit   + +
+
+
+
EcKeyPair = object
+  seckey*: EcPrivateKey
+  pubkey*: EcPublicKey
+
+
+ + +Source   +Edit   + +
+
+
+
EcPKI = EcPrivateKey | EcPublicKey | EcSignature
+
+ + +Source   +Edit   + +
+
+
+
EcPrivateKey = ref object
+  buffer*: array[EC_KBUF_PRIV_MAX_SIZE, byte]
+  key*: ec.EcPrivateKey
+
+
+ + +Source   +Edit   + +
+
+
+
EcPublicKey = ref object
+  buffer*: array[EC_KBUF_PUB_MAX_SIZE, byte]
+  key*: ec.EcPublicKey
+
+
+ + +Source   +Edit   + +
+
+
+
EcResult[T] = Result[T, EcError]
+
+ + +Source   +Edit   + +
+
+
+
EcSignature = ref object
+  buffer*: seq[byte]
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
EcSupportedCurvesCint = [23, 24, 25]
+
+ + +Source   +Edit   + +
+
+
+
PubKey256Length = 65
+
+ + +Source   +Edit   + +
+
+
+
PubKey384Length = 97
+
+ + +Source   +Edit   + +
+
+
+
PubKey521Length = 133
+
+ + +Source   +Edit   + +
+
+
+
SecKey256Length = 32
+
+ + +Source   +Edit   + +
+
+
+
SecKey384Length = 48
+
+ + +Source   +Edit   + +
+
+
+
SecKey521Length = 66
+
+ + +Source   +Edit   + +
+
+
+
Secret256Length = 32
+
+ + +Source   +Edit   + +
+
+
+
Secret384Length = 48
+
+ + +Source   +Edit   + +
+
+
+
Secret521Length = 66
+
+ + +Source   +Edit   + +
+
+
+
Sig256Length = 64
+
+ + +Source   +Edit   + +
+
+
+
Sig384Length = 96
+
+ + +Source   +Edit   + +
+
+
+
Sig521Length = 132
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(pubkey: EcPublicKey): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of EC public key. +Source   +Edit   + +
+
+
+
proc `$`(seckey: EcPrivateKey): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of EC private key. +Source   +Edit   + +
+
+
+
proc `$`(sig: EcSignature): string {....raises: [], tags: [], forbids: [].}
+
+ +Return hexadecimal string representation of EC signature. +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(a, b: EcSignature): bool {....raises: [], tags: [], forbids: [].}
+
+ +Return true if both signatures sig1 and sig2 are equal. +Source   +Edit   + +
+
+
+
proc `==`(pubkey1, pubkey2: EcPublicKey): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ +Returns true if both keys pubkey1 and pubkey2 are equal. +Source   +Edit   + +
+
+
+
proc `==`(seckey1, seckey2: EcPrivateKey): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ +Returns true if both keys seckey1 and seckey2 are equal. +Source   +Edit   + +
+
+ +
+
+
+
proc clear[T: EcPKI | EcKeyPair](pki: var T) {....raises: [].}
+
+ +Wipe and clear EC private key, public key or signature object. +Source   +Edit   + +
+
+ +
+
+
+
proc copy[T: EcPKI](dst: var T; src: T): bool {....raises: [].}
+
+ +

Copy EC private key, public key or signature src to dst.

+

Returns true on success, false otherwise.

+ +Source   +Edit   + +
+
+
+
proc copy[T: EcPKI](src: T): T {.inline, ...raises: [].}
+
+ +Returns copy of EC private key, public key or signature object src. +Source   +Edit   + +
+
+ +
+
+
+
proc ephemeral(scheme: ECDHEScheme; rng: var HmacDrbgContext): EcResult[
+    EcKeyPair] {....raises: [], tags: [], forbids: [].}
+
+ +Generate ephemeral keys used to perform ECDHE. +Source   +Edit   + +
+
+
+
proc ephemeral(scheme: string; rng: var HmacDrbgContext): EcResult[EcKeyPair] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Generate ephemeral keys used to perform ECDHE using string encoding.

+

Currently supported encoding strings are P-256, P-384, P-521, if encoding string is not supported P-521 key will be generated.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc getBytes(pubkey: EcPublicKey): EcResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize EC public key pubkey to ASN.1 DER binary form and return it. +Source   +Edit   + +
+
+
+
proc getBytes(seckey: EcPrivateKey): EcResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize EC private key seckey to ASN.1 DER binary form and return it. +Source   +Edit   + +
+
+
+
proc getBytes(sig: EcSignature): EcResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize EC signature sig to ASN.1 DER binary form and return it. +Source   +Edit   + +
+
+ +
+
+
+
proc getPublicKey(seckey: EcPrivateKey): EcResult[EcPublicKey] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Calculate and return EC public key from private key seckey. +Source   +Edit   + +
+
+ +
+
+
+
proc getRawBytes(pubkey: EcPublicKey): EcResult[seq[byte]] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Serialize EC public key pubkey to raw binary form and return it. +Source   +Edit   + +
+
+
+
proc getRawBytes(seckey: EcPrivateKey): EcResult[seq[byte]] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Serialize EC private key seckey to raw binary form and return it. +Source   +Edit   + +
+
+
+
proc getRawBytes(sig: EcSignature): EcResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize EC signature sig to raw binary form and return it. +Source   +Edit   + +
+
+ +
+
+
+
proc getSecret(pubkey: EcPublicKey; seckey: EcPrivateKey): seq[byte] {.
+    ...raises: [], tags: [RootEffect], forbids: [].}
+
+ +

Calculate ECDHE shared secret using Go's elliptic curve approach, using remote public key pubkey and local private key seckey and return shared secret.

+

If error happens length of result array will be 0.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc init(key: var EcPrivateKey; data: openArray[byte]): Result[void, Asn1Error] {.
+    ...raises: [], tags: [RootEffect], forbids: [].}
+
+ +

Initialize EC private key or signature key from ASN.1 DER binary representation data.

+

Procedure returns Result[void, Asn1Error].

+ +Source   +Edit   + +
+
+
+
proc init(pubkey: var EcPublicKey; data: openArray[byte]): Result[void,
+    Asn1Error] {....raises: [], tags: [RootEffect], forbids: [].}
+
+ +

Initialize EC public key pubkey from ASN.1 DER binary representation data.

+

Procedure returns Result[void, Asn1Error].

+ +Source   +Edit   + +
+
+
+
proc init(sig: var EcSignature; data: openArray[byte]): Result[void, Asn1Error] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Initialize EC signature sig from raw binary representation data.

+

Procedure returns Result[void, Asn1Error].

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EcPrivateKey]; data: openArray[byte]): EcResult[
+    EcPrivateKey] {....raises: [].}
+
+ +Initialize EC private key from ASN.1 DER binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EcPublicKey]; data: openArray[byte]): EcResult[EcPublicKey] {.
+    ...raises: [].}
+
+ +Initialize EC public key from ASN.1 DER binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EcSignature]; data: openArray[byte]): EcResult[EcSignature] {.
+    ...raises: [].}
+
+ +Initialize EC signature from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init[T: EcPKI](sospk: var T; data: string): Result[void, Asn1Error] {.
+    inline, ...raises: [].}
+
+ +

Initialize EC private key, public key or signature sospk from ASN.1 DER hexadecimal string representation data.

+

Procedure returns Asn1Status.

+ +Source   +Edit   + +
+
+
+
proc init[T: EcPKI](t: typedesc[T]; data: string): EcResult[T] {....raises: [].}
+
+ +Initialize EC private key, public key or signature from hexadecimal string representation data and return constructed object. +Source   +Edit   + +
+
+ +
+
+
+
proc initRaw(key: var EcPrivateKey; data: openArray[byte]): bool {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ +

Initialize EC private key or scalar key from raw binary representation data.

+

Length of data array must be SecKey256Length, SecKey384Length or SecKey521Length.

+

Procedure returns true on success, false otherwise.

+ +Source   +Edit   + +
+
+
+
proc initRaw(pubkey: var EcPublicKey; data: openArray[byte]): bool {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ +

Initialize EC public key pubkey from raw binary representation data.

+

Length of data array must be PubKey256Length, PubKey384Length or PubKey521Length.

+

Procedure returns true on success, false otherwise.

+ +Source   +Edit   + +
+
+
+
proc initRaw(sig: var EcSignature; data: openArray[byte]): bool {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Initialize EC signature sig from raw binary representation data.

+

Length of data array must be Sig256Length, Sig384Length or Sig521Length.

+

Procedure returns true on success, false otherwise.

+ +Source   +Edit   + +
+
+
+
proc initRaw(t: typedesc[EcPrivateKey]; data: openArray[byte]): EcResult[
+    EcPrivateKey] {....raises: [].}
+
+ +Initialize EC private key from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc initRaw(t: typedesc[EcPublicKey]; data: openArray[byte]): EcResult[
+    EcPublicKey] {....raises: [].}
+
+ +Initialize EC public key from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc initRaw(t: typedesc[EcSignature]; data: openArray[byte]): EcResult[
+    EcSignature] {....raises: [].}
+
+ +Initialize EC signature from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc initRaw[T: EcPKI](sospk: var T; data: string): bool {.inline, ...raises: [].}
+
+ +

Initialize EC private key, public key or signature sospk from raw hexadecimal string representation data.

+

Procedure returns true on success, false otherwise.

+ +Source   +Edit   + +
+
+
+
proc initRaw[T: EcPKI](t: typedesc[T]; data: string): T {.inline, ...raises: [].}
+
+ +Initialize EC private key, public key or signature from raw hexadecimal string representation data and return constructed object. +Source   +Edit   + +
+
+ +
+
+
+
proc random(T: typedesc[EcKeyPair]; kind: EcCurveKind; rng: var HmacDrbgContext): EcResult[
+    T] {....raises: [].}
+
+ +

Generate new random EC private and public keypair using BearSSL's HMAC-SHA256-DRBG algorithm.

+

kind elliptic curve kind of your choice (secp256r1, secp384r1 or secp521r1).

+ +Source   +Edit   + +
+
+
+
proc random(T: typedesc[EcPrivateKey]; kind: EcCurveKind;
+            rng: var HmacDrbgContext): EcResult[EcPrivateKey] {....raises: [].}
+
+ +

Generate new random EC private key using BearSSL's HMAC-SHA256-DRBG algorithm.

+

kind elliptic curve kind of your choice (secp256r1, secp384r1 or secp521r1).

+ +Source   +Edit   + +
+
+ +
+
+
+
proc scalarMul(pub: EcPublicKey; sec: EcPrivateKey): EcPublicKey {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ +

Return scalar multiplication of pub and sec.

+

Returns point in curve as pub * sec or nil otherwise.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc sign[T: byte | char](seckey: EcPrivateKey; message: openArray[T]): EcResult[
+    EcSignature] {....gcsafe, raises: [].}
+
+ +Get ECDSA signature of data message using private key seckey. +Source   +Edit   + +
+
+ +
+
+
+
proc toBytes(pubkey: EcPublicKey; data: var openArray[byte]): EcResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize EC public key pubkey to ASN.1 DER binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store EC public key, or 0 if public key is not in supported curve.

+ +Source   +Edit   + +
+
+
+
proc toBytes(seckey: EcPrivateKey; data: var openArray[byte]): EcResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize EC private key seckey to ASN.1 DER binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store EC private key, or 0 if private key is not in supported curve.

+ +Source   +Edit   + +
+
+
+
proc toBytes(sig: EcSignature; data: var openArray[byte]): EcResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize EC signature sig to ASN.1 DER binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store EC signature, or 0 if signature is not in supported curve.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc toRawBytes(pubkey: EcPublicKey; data: var openArray[byte]): EcResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize EC public key pubkey to uncompressed form specified in section 4.3.6 of ANSI X9.62.

+

Returns number of bytes (octets) needed to store EC public key, or 0 if public key is not in supported curve.

+ +Source   +Edit   + +
+
+
+
proc toRawBytes(seckey: EcPrivateKey; data: var openArray[byte]): EcResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize EC private key seckey to raw binary form and store it to data.

+

Returns number of bytes (octets) needed to store EC private key, or 0 if private key is not in supported curve.

+ +Source   +Edit   + +
+
+
+
proc toRawBytes(sig: EcSignature; data: var openArray[byte]): int {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Serialize EC signature sig to raw binary form and store it to data.

+

Returns number of bytes (octets) needed to store EC signature, or 0 if signature is not in supported curve.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc toSecret(pubkey: EcPublicKey; seckey: EcPrivateKey;
+              data: var openArray[byte]): int {....raises: [], tags: [RootEffect],
+    forbids: [].}
+
+ +

Calculate ECDHE shared secret using Go's elliptic/curve approach, using remote public key pubkey and local private key seckey and store shared secret to data.

+

Returns number of bytes (octets) needed to store shared secret, or 0 on error.

+

data array length must be at least 32 bytes for secp256r1, 48 bytes for secp384r1 and 66 bytes for secp521r1.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc verify[T: byte | char](sig: EcSignature; message: openArray[T];
+                            pubkey: EcPublicKey): bool {.inline, ...raises: [].}
+
+ +

Verify ECDSA signature sig using public key pubkey and data message.

+

Return true if message verification succeeded, false if verification failed.

+ +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template getPrivateKeyLength(curve: EcCurveKind): int
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template getPublicKeyLength(curve: EcCurveKind): int
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ Asn1Error +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/crypto/ed25519/constants.html b/traffic-score-tests/libp2p/crypto/ed25519/constants.html new file mode 100644 index 000000000..e16fe6398 --- /dev/null +++ b/traffic-score-tests/libp2p/crypto/ed25519/constants.html @@ -0,0 +1,2965 @@ + + + + + + + +libp2p/crypto/ed25519/constants + + + + + + + + + + + + +
+
+

libp2p/crypto/ed25519/constants

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements ED25519. This is pure nim implementation of ED25519 ref10.

+
+

Types

+
+
+
Fe = array[10, int32]
+
+ + +Source   +Edit   + +
+
+
+
GeCached = object
+  yplusx*, yminusx*, z*, t2d*: Fe
+
+
+ + +Source   +Edit   + +
+
+
+
GeP1P1 = object
+  x*, y*, z*, t*: Fe
+
+
+ + +Source   +Edit   + +
+
+
+
GeP2 = object
+  x*, y*, z*: Fe
+
+
+ + +Source   +Edit   + +
+
+
+
GeP3 = object
+  x*, y*, z*, t*: Fe
+
+
+ + +Source   +Edit   + +
+
+
+
GePrecomp = object
+  yplusx*, yminusx*, xy2d*: Fe
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
BasePrecomp = [[(yplusx: [25967493, -14356035, 29566456, 3660896, -12694345,
+                          4014787, 27544626, -11754271, -6079156, 2047605], yminusx: [
+    -12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384,
+    19500929, -15469378], xy2d: [-8738181, 4489570, 9688441, -14785194,
+                                 10184609, -12363380, 29287919, 11864899,
+                                 -24514362, -4438546]), (yplusx: [-12815894,
+    -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571,
+    -358445, -10211303], yminusx: [-21703237, 6903825, 27185491, 6451973,
+                                   -29577724, -9554005, -15616551, 11189268,
+                                   -26829678, -5319081], xy2d: [26966642,
+    11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118,
+    -15472047, -4166697]), (yplusx: [15636291, -9688557, 24204773, -7912398,
+                                     616977, -16685262, 27787600, -14772189,
+                                     28944400, -1550024], yminusx: [16568933,
+    4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962,
+    7689662, 11199574], xy2d: [30464156, -5976125, -11779434, -15670865,
+                               23220365, 15915852, 7512774, 10017326, -17749093,
+                               -9920357]), (yplusx: [-17036878, 13921892,
+    10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568,
+    -6276540], yminusx: [23599295, -8306047, -11193664, -7687416, 13236774,
+                         10506355, 7464579, 9656445, 13059162, 10374397], xy2d: [
+    7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045,
+    -641708, -101325]), (yplusx: [10861363, 11473154, 27284546, 1981175,
+                                  -30064349, 12577861, 32867885, 14515107,
+                                  -15438304, 10819380], yminusx: [4708026,
+    6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688,
+    -12668491, 5581306], xy2d: [19563160, 16186464, -29386857, 4097519,
+                                10237984, -4348115, 28542350, 13850243,
+                                -23678021, -15815942]), (yplusx: [-15371964,
+    -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819,
+    -9818940, -12085777], yminusx: [-8549212, 109983, 15149363, 2178705,
+                                    22900618, 4543417, 3044240, -15689887,
+                                    1762328, 14866737], xy2d: [-18199695,
+    -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421,
+    27914454, 4383652]), (yplusx: [5153746, 9909285, 1723747, -2777874,
+                                   30523605, 5516873, 19480852, 5230134,
+                                   -23952439, -15175766], yminusx: [-30269007,
+    -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125,
+    30598449, 7715701], xy2d: [28881845, 14381568, 9657904, 3680757, -20181635,
+                               7843316, -31400660, 1370708, 29794553, -1409300]), (yplusx: [
+    14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735,
+    10876454, -33154098, 2381726], yminusx: [-7195431, -2655363, -14730155,
+    462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955], xy2d: [
+    27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401,
+    -2970515, 29551813, 10109425])], [(yplusx: [-13657040, -13155431, -31283750,
+    11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171], yminusx: [
+    27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754,
+    12005538, -17810127, 12803510], xy2d: [17228999, -15661624, -1233527,
+    300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660]), (yplusx: [
+    -10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106,
+    14544525, -17477504, 982639], yminusx: [29253598, 15796703, -2863982,
+    -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963], xy2d: [
+    5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930,
+    4559895, -30123922, -10897950]), (yplusx: [-27643952, -11493006, 16282657,
+    -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568], yminusx: [
+    12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592,
+    12264343, 10874051, 13524335], xy2d: [25556948, -3045990, 714651, 2510400,
+    23394682, -10415330, 33119038, 5080568, -22528059, 5376628]), (yplusx: [
+    -26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305,
+    -9447443, 4535768, 1569007], yminusx: [-2255422, 14606630, -21692440,
+    -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772], xy2d: [
+    -22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195,
+    -2062731, 7718482, 14474653]), (yplusx: [2385315, 2454213, -22631320, 46603,
+    -4437935, -15680415, 656965, -7236665, 24316168, -5253567], yminusx: [
+    13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651,
+    -13424532, -20729456, 8321686], xy2d: [21060490, -2212744, 15712757,
+    -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372]), (yplusx: [
+    -13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968,
+    -6780577, 27229399, 23887], yminusx: [-23244140, -294205, -11744728,
+    14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954], xy2d: [
+    -29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144,
+    -4795045, -17169265, 4904953]), (yplusx: [24059557, 14617003, 19037157,
+    -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833], yminusx: [
+    -16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336,
+    916033, -6882542, -2986532], xy2d: [-22630907, 12419372, -7134229, -7473371,
+                                        -16478904, 16739175, 285431, 2763829,
+                                        15736322, 4143876]), (yplusx: [2379352,
+    11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084,
+    -16458268], yminusx: [33431127, -11130478, -17838966, -15626900, 8909499,
+                          8376530, -32625340, 4087881, -15188911, -14416214], xy2d: [
+    1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868,
+    -4774191, -16323038])], [(yplusx: [6721966, 13833823, -23523388, -1551314,
+                                       26354293, -11863321, 23365147, -3949732,
+                                       7390890, 2759800], yminusx: [4409041,
+    2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057,
+    1244380, -12919645], xy2d: [-4421239, 7169619, 4982368, -2957590, 30256825,
+                                -2777540, 14086413, 9208236, 15886429, 16489664]), (yplusx: [
+    1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198,
+    398369, -30606455, -712933], yminusx: [-25307465, 9795880, -2777414,
+    14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182], xy2d: [
+    -17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101,
+    -7336386, 13847711, 5387222]), (yplusx: [-18582163, -3416217, 17824843,
+    -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991], yminusx: [
+    20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437,
+    -8746092, 32232924, 16763880], xy2d: [9648505, 10094563, 26416693, 14745928,
+    -30374318, -6472621, 11094161, 15689506, 3140038, -16510092]), (yplusx: [
+    -16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800,
+    9448613, -28774454, 366295], yminusx: [19153450, 11523972, -11096490,
+    -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788], xy2d: [
+    8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916,
+    -15266516, 27000813, -10195553]), (yplusx: [-15157904, 7134312, 8639287,
+    -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026], yminusx: [
+    11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823,
+    -8819122, 8169720, 16220347], xy2d: [-18115838, 8653647, 17578566, -6092619,
+    -8025777, -16012763, -11144307, -2627664, -5990708, -14166033]), (yplusx: [
+    -23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329,
+    2847284, 2655861, 1738395], yminusx: [-27537433, -14253021, -25336301,
+    -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278], xy2d: [
+    1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408,
+    10478196, 8544890]), (yplusx: [32173121, -16129311, 24896207, 3921497,
+                                   22579056, -3410854, 19270449, 12217473,
+                                   17789017, -3395995], yminusx: [-30552961,
+    -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233,
+    30460520, 1052596], xy2d: [-11614875, 13323618, 32618793, 8175907,
+                               -15230173, 12596687, 27491595, -4612359, 3179268,
+                               -9478891]), (yplusx: [31947069, -14366651,
+    -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640,
+    -9511060], yminusx: [11685058, 11822410, 3158003, -13952594, 33402194,
+                         -4165066, 5977896, -5215017, 473099, 5040608], xy2d: [
+    -20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862,
+    1721092, -19558642, -3131606])], [(yplusx: [7881532, 10687937, 7578723,
+    7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389], yminusx: [
+    -19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525,
+    7446702, -5676054, 5797016], xy2d: [-11295600, -3793569, -15782110,
+                                        -7964573, 12708869, -8456199, 2014099,
+                                        -9050574, -2369172, -5877341]), (yplusx: [
+    -22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730,
+    -3714199, 15123619, 10811505], yminusx: [14352098, -3419715, -18942044,
+    10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553], xy2d: [
+    -28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173,
+    -16484855, 4714547, -9600655]), (yplusx: [15200332, 8368572, 19679101,
+    15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220], yminusx: [
+    12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953,
+    8241152, 15370987, 9608631], xy2d: [-4143277, -12014408, 8446281, -391603,
+                                        4407738, 13629032, -7724868, 15866074,
+                                        -28210621, -8814099]), (yplusx: [
+    26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697,
+    20571223, 8420556], yminusx: [14620715, 13067227, -15447274, 8264467,
+                                  14106269, 15080814, 33531827, 12516406,
+                                  -21574435, -12476749], xy2d: [236881,
+    10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136,
+    15069930]), (yplusx: [1276410, -9371918, 22949635, -16322807, -23493039,
+                          -5702186, 14711875, 4874229, -30663140, -2331391], yminusx: [
+    5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378,
+    -33069337, 9234253], xy2d: [20590503, -9018988, 31529744, -7352666,
+                                -2706834, 10650548, 31559055, -11609587,
+                                18979186, 13396066]), (yplusx: [24474287,
+    4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782,
+    33514650, 7021958], yminusx: [-11566906, -6565505, -21365085, 15928892,
+                                  -26158305, 4315421, -25948728, -3916677,
+                                  -21480480, 12868082], xy2d: [-28635013,
+    13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500,
+    -12455797, -8089383]), (yplusx: [-30595528, 13793479, -5852820, 319136,
+                                     -25723172, -6263899, 33086546, 8957937,
+                                     -15233648, 5540521], yminusx: [-11630176,
+    -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984,
+    -16128528, -14962807], xy2d: [23152971, 775386, 27395463, 14006635,
+                                  -9701118, 4649512, 1689819, 892185, -11513277,
+                                  -15205948]), (yplusx: [9770129, 9586738,
+    26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134], yminusx: [
+    -32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559,
+    5931263, -29749703, -16108455], xy2d: [27461885, -2977536, 22380810,
+    1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629])], [(yplusx: [
+    -8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295,
+    -3176626, 18549497, 15302069], yminusx: [-32658337, -6171222, -7672793,
+    -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746], xy2d: [
+    24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234,
+    7134917, -11284482, -828919]), (yplusx: [11334899, -9218022, 8025293,
+    12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837], yminusx: [
+    8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925,
+    -14124238, 6536641, 10543906], xy2d: [-28946384, 15479763, -17466835,
+    568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771]), (yplusx: [
+    -25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822,
+    15824474, -604426, -9039817], yminusx: [10330056, 70051, 7957388, -9002667,
+    9764902, 15609756, 27698697, -4890037, 1657394, 3084098], xy2d: [10477963,
+    -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151,
+    -30233575, 15272409]), (yplusx: [-12288309, 3169463, 28813183, 16658753,
+                                     25116432, -5630466, -25173957, -12636138,
+                                     -25014757, 1950504], yminusx: [-26180358,
+    9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532,
+    15341279, 8373727], xy2d: [28685821, 7759505, -14378516, -12002860,
+                               -31971820, 4079242, 298136, -10232602, -2878207,
+                               15190420]), (yplusx: [-32932876, 13806336,
+    -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313,
+    -6875003], yminusx: [-1580388, -11729417, -25979658, -11445023, -17411874,
+                         -10912854, 9291594, -16247779, -12154742, 6048605], xy2d: [
+    -30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231,
+    5128323, 11213262, 9168384]), (yplusx: [-26280513, 11007847, 19408960,
+    -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701], yminusx: [
+    -23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952,
+    14461608, 14042978, 5230683], xy2d: [29969567, -2741594, -16711867,
+    -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708]), (yplusx: [
+    -3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170,
+    8971513, -28539189, 15326563], yminusx: [-19464629, 10110288, -17262528,
+    -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260], xy2d: [
+    -5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358,
+    9601605, 33087103, -9011387]), (yplusx: [-19443170, -15512900, -20797467,
+    -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672], yminusx: [
+    23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750,
+    -2460356, 18151676, 13417686], xy2d: [-24722913, -4176517, -31150679,
+    5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665])], [(yplusx: [
+    11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764,
+    2167544, -6921301, -13440182], yminusx: [-31436171, 15575146, 30436815,
+    12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277], xy2d: [
+    14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440,
+    4617780, -16900089, -655628]), (yplusx: [-4026201, -15240835, 11893168,
+    13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474], yminusx: [
+    -26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390,
+    -11419951, 32013174, -10103539], xy2d: [-25479301, 10876443, -11771086,
+    -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822]), (yplusx: [
+    -10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375,
+    -12020462, 4725005, 14044970], yminusx: [19268650, -7304421, 1555349,
+    8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756], xy2d: [
+    -24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418,
+    8180106, 9282262, 10282508]), (yplusx: [-26205082, 4428547, -8661196,
+    -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683], yminusx: [
+    -10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891,
+    6993761, -18093885, 10114655], xy2d: [-20107055, -929418, 31422704,
+    10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158]), (yplusx: [
+    -4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020,
+    6094296, -3315279, 12831125], yminusx: [-15998678, 7578152, 5310217,
+    14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839], xy2d: [
+    -20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303,
+    8082724, -15362489, 12339664]), (yplusx: [27724736, 2291157, 6088201,
+    -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294], yminusx: [
+    -18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300,
+    -12695493, -22182473, -9012899], xy2d: [-11423429, -5421590, 11632845,
+    3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070]), (yplusx: [
+    3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774,
+    9326384, -8237858, 4171294], yminusx: [-15921940, 16037937, 6713787,
+    16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949], xy2d: [
+    -21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539,
+    -12391231, -16253183, -13582083]), (yplusx: [31016211, -16722429, 26371392,
+    -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420], yminusx: [
+    -5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873,
+    16292057, -8867157, 3507940], xy2d: [29439664, 3537914, 23333589, 6997794,
+    -17555561, -11018068, -15209202, -15051267, -9164929, 6580396])], [(yplusx: [
+    -12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444,
+    -9273846, -2095802, 9304567], yminusx: [20714564, -4336911, 29088195,
+    7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127], xy2d: [
+    -16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490,
+    12349094, 26939669, -3752294]), (yplusx: [-12889898, 9373458, 31595848,
+    16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887], yminusx: [
+    22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253,
+    5358056, -23319780, 541964], xy2d: [16259219, 3261970, 2309254, -15534474,
+                                        -16885711, -4581916, 24134070,
+                                        -16705829, -13337066, -13552195]), (yplusx: [
+    9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684,
+    -717351, 690426, 14876244], yminusx: [24977353, -314384, -8223969,
+    -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999], xy2d: [
+    -1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829,
+    -13817328, 32239829, -5652762]), (yplusx: [-18603066, 4762990, -926250,
+    8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274], yminusx: [
+    -33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656,
+    14506724, 21639561, -2630236], xy2d: [-16400943, -13112215, 25239338,
+    15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605]), (yplusx: [
+    -13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487,
+    5080151, 2085892, 5119761], yminusx: [-22205145, -2519528, -16381601,
+    414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884], xy2d: [
+    -6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430,
+    -7192145, -22351378, 12961482]), (yplusx: [-24492060, -9570771, 10368194,
+    11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638], yminusx: [
+    -11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275,
+    7589640, 8945490], xy2d: [-32152748, 8917967, 6661220, -11677616, -1192060,
+                              -15793393, 7251489, -11182180, 24099109, -14456170]), (yplusx: [
+    5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182,
+    -13289025, -6231896, -10280736], yminusx: [10853594, 10721687, 26480089,
+    5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124], xy2d: [
+    -17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661,
+    -2008168, -13866408, 7421392]), (yplusx: [8139927, -6546497, 32257646,
+    -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029], yminusx: [
+    6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160,
+    -7840124, 13746021, -1742048], xy2d: [28584902, 7787108, -6732942,
+    -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958])], [(yplusx: [
+    24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569,
+    -12141695, 3569627, 11342593], yminusx: [26514989, 4740088, 27912651,
+    3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071], xy2d: [
+    -11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540,
+    10258390, -17646694, -8186692]), (yplusx: [11431204, 15823007, 26570245,
+    14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687], yminusx: [
+    -160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901,
+    -11181622, -15545091, 4387441], xy2d: [-20799378, 12194512, 3937617,
+    -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001]), (yplusx: [
+    -938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352,
+    -11875822, 24345683, 10325460], yminusx: [-19855277, -1568885, -22202708,
+    8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007], xy2d: [
+    -21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514,
+    14481909, 10988822, -3994762]), (yplusx: [15564307, -14311570, 3101243,
+    5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005], yminusx: [
+    -9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204,
+    9614054, -30000824, 12074674], xy2d: [4771191, -135239, 14290749, -13089852,
+    27992298, 14998318, -1413936, -1556716, 29832613, -16391035]), (yplusx: [
+    7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242,
+    5293297, -27122660, 13101590], yminusx: [-2298563, 2439670, -7466610,
+    1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957], xy2d: [
+    -30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974,
+    9515896, 19568978, 9628812]), (yplusx: [33053803, 199357, 15894591, 1583059,
+    27380243, -4580435, -17838894, -6106839, -6291786, 3437740], yminusx: [
+    -18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733,
+    70104, 7463304, 4176122], xy2d: [-27124001, 10659917, 11482427, -16070381,
+                                     12771467, -6635117, -32719404, -5322751,
+                                     24216882, 5944158]), (yplusx: [8894125,
+    7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796,
+    11632993, 5847885], yminusx: [26942781, -2315317, 9129564, -4906607,
+                                  26024105, 11769399, -11518837, 6367194,
+                                  -9727230, 4782140], xy2d: [19916461, -4828410,
+    -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847,
+    -1873857]), (yplusx: [801428, -2081702, 16569428, 11065167, 29875704, 96627,
+                          7908388, -4480480, -13538503, 1387155], yminusx: [
+    19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075,
+    15156355, -21866831, 11835260], xy2d: [19299512, 1155910, 28703737,
+    14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483])], [(yplusx: [
+    -3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123,
+    -12618185, 12228557, -7003677], yminusx: [32944382, 14922211, -22844894,
+    5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815], xy2d: [
+    22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405,
+    5719875, 28483275, 2841751]), (yplusx: [-16420968, -1113305, -327719,
+    -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203], yminusx: [
+    -11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228,
+    13239134, -4777469, -13910208], xy2d: [1382174, -11694719, 17266790,
+    9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230]), (yplusx: [
+    16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424,
+    16271225, -24049421, -6691850], yminusx: [-21911077, -5927941, -4611316,
+    -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389], xy2d: [
+    -9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908,
+    14690798, 17361620, 11864968]), (yplusx: [-11307610, 6210372, 13206574,
+    5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689], yminusx: [
+    14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892,
+    6577524, 9145645, -6443880], xy2d: [5974874, 3053895, -9433049, -10385191,
+                                        -31865124, 3225009, -7972642, 3936128,
+                                        -5652273, -3050304]), (yplusx: [
+    30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188,
+    -16303496, -27999779, 1803632], yminusx: [-3553091, 9865099, -5228566,
+    4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412], xy2d: [
+    20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851,
+    4124601, -32343828, -10257566]), (yplusx: [-20788824, 14084654, -13531713,
+    7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038], yminusx: [
+    -26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502,
+    14625692, -24819617, 12570232], xy2d: [-1063558, -11551823, 16920318,
+    12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943]), (yplusx: [
+    17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383,
+    -8659932, -29576300, 1903856], yminusx: [23134274, -14279132, -10681997,
+    -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738], xy2d: [
+    15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325,
+    -11277562, 31960942, 11934971]), (yplusx: [-27395711, 8435796, 4109644,
+    12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718], yminusx: [
+    -13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459,
+    16176658, 21432314, 12180697], xy2d: [-11787308, 11500838, 13787581,
+    -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883])], [(yplusx: [
+    5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916,
+    -1342231, 26128231, 6032912], yminusx: [-26337395, -13766162, 32496025,
+    -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358], xy2d: [
+    3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297,
+    -4639164, 12376617, 3188849]), (yplusx: [29190488, -14659046, 27549113,
+    -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307], yminusx: [
+    -14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078,
+    -15795669, 18640741, -960977], xy2d: [-6928835, -16430795, 10361374,
+    5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335]), (yplusx: [
+    -29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369,
+    -2948985, 24018831, 15026644], yminusx: [-22592535, -3145277, -2289276,
+    5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616], xy2d: [
+    -27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622,
+    187899, -23166419, -2531735]), (yplusx: [-21744398, -13810475, 1844840,
+    5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099], yminusx: [
+    29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962,
+    -4839461, 30007388, -15823341], xy2d: [-936379, 16086691, 23751945, -543318,
+    -1167538, -5189036, 9137109, 730663, 9835848, 4555336]), (yplusx: [
+    -23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930,
+    544696, -11985298, 12422646], yminusx: [31117226, -12215734, -13502838,
+    6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425], xy2d: [
+    -17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939,
+    -11317700, 7240931, -237388]), (yplusx: [-31361739, -11346780, -15007447,
+    -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743], yminusx: [
+    -16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580,
+    7733547, 12796905, -6335822], xy2d: [-8759414, -10817836, -25418864,
+    10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462]), (yplusx: [
+    18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893,
+    -2048234, -7550776, 2484985], yminusx: [9255317, -3131197, -12156162,
+    -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702], xy2d: [
+    -22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148,
+    9936966, -30097688, -10618797]), (yplusx: [21878590, -5001297, 4338336,
+    13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293], yminusx: [
+    27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918,
+    -1550276, -23659143, -8132100], xy2d: [19492550, -12104365, -29681976,
+    -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688])], [(yplusx: [
+    12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191,
+    -5645734, 5150968, 7274186], yminusx: [2831366, -12492146, 1478975, 6122054,
+    23825128, -12733586, 31097299, 6083058, 31021603, -9793610], xy2d: [
+    -2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731,
+    16354465, 15067285, -14147707]), (yplusx: [7840942, 14037873, -33364863,
+    15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220], yminusx: [
+    915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319,
+    8410997, -7220461, 16527025], xy2d: [32922597, -556987, 20336074, -16184568,
+    10903705, -5384487, 16957574, 52992, 23834301, 6588044]), (yplusx: [
+    32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699,
+    16689107, -20314580, -1305992], yminusx: [-4689649, 9166776, -25710296,
+    -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027], xy2d: [
+    21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041,
+    -3371252, 12331345, -8237197]), (yplusx: [8651614, -4477032, -16085636,
+    -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901], yminusx: [
+    31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321,
+    -13662089, 8684155, -10532952], xy2d: [19443825, 11385320, 24468943,
+    -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878]), (yplusx: [
+    -28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014,
+    6992409, 29126555, 9207390], yminusx: [32382935, 1110093, 18477781,
+    11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730], xy2d: [
+    2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559,
+    8550130, 28346258, 1994730]), (yplusx: [-19578299, 8085545, -14000519,
+    -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180], yminusx: [
+    -30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578,
+    3317160, -9943017, 930272], xy2d: [-15303681, -6833769, 28856490, 1357446,
+                                       23421993, 1057177, 24091212, -1388970,
+                                       -22765376, -10650715]), (yplusx: [
+    -22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018,
+    -16554220, -1867018, 8398970], yminusx: [-31969310, 2106403, -4736360,
+    1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772], xy2d: [
+    -17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787,
+    -3727419, 19288549, 1325865]), (yplusx: [15100157, -15835752, -23923978,
+    -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750], yminusx: [
+    20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151,
+    10018715, 2213263, -13878373], xy2d: [32529814, -11074689, 30361439,
+    -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348])], [(yplusx: [
+    9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687,
+    -8193132, -26442943, 10486144], yminusx: [-22597207, -7012665, 8587003,
+    -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195], xy2d: [
+    5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731,
+    -4235541, 19985175, -3436086]), (yplusx: [-13994457, 16616821, 14549246,
+    3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684], yminusx: [
+    -8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942,
+    6922164, 12743482, -9800518], xy2d: [-2361371, 12678785, 28815050, 4759974,
+    -23893047, 4884717, 23783145, 11038569, 18800704, 255233]), (yplusx: [
+    -5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957,
+    19258688, -14753793], yminusx: [-2936654, -10827535, -10432089, 14516793,
+                                    -3640786, 4372541, -31934921, 2209390,
+                                    -1524053, 2055794], xy2d: [580882, 16705327,
+    5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019,
+    7394435]), (yplusx: [23838809, 1822728, -15738443, 15242727, 8318092,
+                         -3733104, -21672180, -3492205, -4821741, 14799921], yminusx: [
+    13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804,
+    13496856, -9056018, 7402518], xy2d: [2286874, -4435931, -20042458, -2008336,
+    -13696227, 5038122, 11006906, -15760352, 8205061, 1607563]), (yplusx: [
+    14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661,
+    -2906958, 30019587, -9029278], yminusx: [-27688051, 1585953, -10775053,
+    931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024], xy2d: [
+    4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594,
+    -999085, -8142388, 5640030]), (yplusx: [10299610, 13746483, 11661824,
+    16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783], yminusx: [
+    27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605,
+    -1173195, -18342183, 9742717], xy2d: [6744077, 2427284, 26042789, 2720740,
+    -847906, 1118974, 32324614, 7406442, 12420155, 1994844]), (yplusx: [
+    14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478,
+    -10909803, 24319929, -6446333], yminusx: [16412690, -4507367, 10772641,
+    15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048], xy2d: [
+    22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065,
+    6199366, 21880021, -12250760]), (yplusx: [-4283307, 5368523, -31117018,
+    8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760], yminusx: [
+    -15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181,
+    12130072, -14796503, 5005757], xy2d: [-2114751, -14308128, 23019042,
+    15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112])], [(yplusx: [
+    -19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908,
+    -3057104, 22208662, 2000468], yminusx: [3065073, -1412761, -25598674,
+    -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184], xy2d: [
+    10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915,
+    2553332, -3132688, 16400289]), (yplusx: [15716668, 1254266, -18472690,
+    7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066], yminusx: [
+    24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463,
+    64452, -6817084, -2692882], xy2d: [13488534, 7794716, 22236231, 5989356,
+                                       25426474, -12578208, 2350710, -3418511,
+                                       -4688006, 2364226]), (yplusx: [16335052,
+    9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457,
+    15445875, -7798101], yminusx: [29004207, -7867081, 28661402, -640412,
+                                   -12794003, -7943086, 31863255, -4135540,
+                                   -278050, -15759279], xy2d: [-6122061,
+    -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290,
+    -29828287, -10815811]), (yplusx: [27081650, 3463984, 14099042, -4517604,
+                                      1616303, -6205604, 29542636, 15372179,
+                                      17293797, 960709], yminusx: [20263915,
+    11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122,
+    -19384511, 7639714], xy2d: [-2830798, -14839232, 25403038, -8215196,
+                                -8317012, -16173699, 18006287, -16043750,
+                                29994677, -15808121]), (yplusx: [9769828,
+    5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782,
+    -31184575, 709464], yminusx: [12286395, 13076066, -21775189, -1176622,
+                                  -25003198, 4057652, -32018128, -8890874,
+                                  16102007, 13205847], xy2d: [13733362, 5599946,
+    10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400]), (yplusx: [
+    4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229,
+    11743039, -33302334, 8934414], yminusx: [-15879800, -4525240, -8580747,
+    -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158], xy2d: [
+    17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153,
+    -9205489, -1280045]), (yplusx: [-461409, -7830014, 20614118, 16688288,
+                                    -7514766, -4807119, 22300304, 505429,
+                                    6108462, -6183415], yminusx: [-5070281,
+    12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331,
+    -26898490, -7867459], xy2d: [-31975283, 5726539, 26934134, 10237677,
+                                 -3173717, -605053, 24199304, 3795095, 7592688,
+                                 -14992079]), (yplusx: [21594432, -14964228,
+    17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412], yminusx: [
+    -20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942,
+    -1569194, 13717174, 10805743], xy2d: [-14676630, -15644296, 15287174,
+    11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836])], [(yplusx: [
+    12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263,
+    -12808704, -4381056, 9882022], yminusx: [18512079, 11319350, -20123124,
+    15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429], xy2d: [
+    -6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880,
+    -6661110, -2403099, 5276065]), (yplusx: [30169808, -5317648, 26306206,
+    -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861], yminusx: [
+    10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736,
+    -21016438, -8202000], xy2d: [-33150110, 3261608, 22745853, 7948688,
+                                 19370557, -15177665, -26171976, 6482814,
+                                 -10300080, -11060101]), (yplusx: [32869458,
+    -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008,
+    -22664288, 6904815], yminusx: [29506923, 4457497, 3377935, -9796444,
+                                   -30510046, 12935080, 1561737, 3841096,
+                                   -29003639, -6657642], xy2d: [10340844,
+    -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370,
+    -25584551, 5181966]), (yplusx: [25940115, -12658025, 17324188, -10307374,
+                                    -8671468, 15029094, 24396252, -16450922,
+                                    -2322852, -12388574], yminusx: [-21765684,
+    9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771,
+    -6561742], xy2d: [-18882287, -11673380, 24849422, 11501709, 13161720,
+                      -4768874, 1925523, 11914390, 4662781, 7820689]), (yplusx: [
+    12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924,
+    16136752, 15264020], yminusx: [-10349955, -14680563, -8211979, 2330220,
+                                   -17662549, -14545780, 10658213, 6671822,
+                                   19012087, 3772772], xy2d: [3753511, -3421066,
+    10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771,
+    12988982]), (yplusx: [-14822485, -5797269, -3707987, 12689773, -898983,
+                          -10914866, -24183046, -10564943, 3299665, -12424953], yminusx: [
+    -16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331,
+    -25583147, 8991218], xy2d: [-17226263, 1816362, -1673288, -6086439,
+                                31783888, -8175991, -32948145, 7417950,
+                                -30242287, 1507265]), (yplusx: [29692663,
+    6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391,
+    14606362, -10647073], yminusx: [-3481570, 8707081, 32188102, 5672294,
+                                    22096700, 1711240, -33020695, 9761487,
+                                    4170404, -2085325], xy2d: [-11587470,
+    14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000,
+    -14276837, -8400798]), (yplusx: [-4811456, 13761029, -31703877, -2483919,
+                                     -3312471, 7869047, -7113572, -9620092,
+                                     13240845, 10965870], yminusx: [-7742563,
+    -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411,
+    29514390, 4302863], xy2d: [-13413405, -12407859, 20757302, -13801832,
+                               14785143, 8976368, -5061276, -2144373, 17846988,
+                               -13971927])], [(yplusx: [-2244452, -754728,
+    -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701,
+    12650267], yminusx: [-9906797, -16070310, 21134160, 12198166, -27064575,
+                         708126, 387813, 13770293, -19134326, 10958663], xy2d: [
+    22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496,
+    -11574455, -25083830, 4271862]), (yplusx: [-25169565, -10053642, -19909332,
+    15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673], yminusx: [
+    15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198,
+    2697372, 24154791, -9460943], xy2d: [15446137, -15806644, 29759747,
+    14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020]), (yplusx: [
+    -4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676,
+    13438769, 18735128, 9466238], yminusx: [11933045, 9281483, 5081055,
+    -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064], xy2d: [
+    14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766,
+    1876699, 30801119, 2164795]), (yplusx: [15995086, 3199873, 13672555,
+    13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052], yminusx: [
+    -10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338,
+    -12600221, -17055369, 3565904], xy2d: [29210088, -9419337, -5919792,
+    -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531]), (yplusx: [
+    -13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421,
+    -3769423, 2244111, -14001979], yminusx: [-5152875, -3800936, -9306475,
+    -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841], xy2d: [
+    10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447,
+    -7721242, 14476989, -12767431]), (yplusx: [10292079, 9984945, 6481436,
+    8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324], yminusx: [
+    -31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662,
+    3988035, 21721536, -3148940], xy2d: [10202177, -6545839, -31373232,
+    -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320]), (yplusx: [
+    -15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847,
+    13765824, -27434397, 9900184], yminusx: [14465505, -13833331, -32133984,
+    -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114], xy2d: [
+    30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601,
+    15413635, 9524356, -7018878]), (yplusx: [12274201, -13175547, 32627641,
+    -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784], yminusx: [
+    -2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739,
+    -15889334, -22258478, 4659091], xy2d: [-16916263, -4952973, -30393711,
+    -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585])], [(yplusx: [
+    -8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496,
+    278095, 23440562, -290208], yminusx: [10226241, -5928702, 15139956, 120818,
+    -14867693, 5218603, 32937275, 11551483, -16571960, -7442864], xy2d: [
+    17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767,
+    5561594, -3646624, 3898661]), (yplusx: [7749907, -969567, -16339731, -16464,
+    -25018111, 15122143, -1573531, 7152530, 21831162, 1245233], yminusx: [
+    26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295,
+    -620035, -30402091, -16716212], xy2d: [-12165896, 9166947, 33491384,
+    13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525]), (yplusx: [
+    -24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898,
+    -5124639, -7469781, -2858068], yminusx: [9681908, -6737123, -31951644,
+    13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397], xy2d: [
+    -8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683,
+    12092163, 29077877, -14741988]), (yplusx: [5269168, -6859726, -13230211,
+    -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889], yminusx: [
+    32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804,
+    -12869908, 5727338, 189038], xy2d: [14609123, -8954470, -6000566, -16622781,
+                                        -14577387, -7743898, -26745169,
+                                        10942115, -25888931, -14884697]), (yplusx: [
+    20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968,
+    7471781, 13913677, -5137875], yminusx: [-25574376, 11967826, 29233242,
+    12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905], xy2d: [
+    -25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418,
+    6812974, 5568676, -3127656]), (yplusx: [11630004, 12144454, 2116339,
+    13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818], yminusx: [
+    27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906,
+    10483306, -11552749, -1028714], xy2d: [10637467, -5688064, 5674781, 1072708,
+    -26343588, -6982302, -1683975, 9177853, -27493162, 15431203]), (yplusx: [
+    20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519,
+    14943142, -15056790, -7935931], yminusx: [-30024462, 5626926, -551567,
+    -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024], xy2d: [
+    -23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683,
+    -6492290, 13352335, -10977084]), (yplusx: [-1931799, -5407458, 3304649,
+    -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204], yminusx: [
+    20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742,
+    15077870, -22750759, 14523817], xy2d: [27406042, -6041657, 27423596,
+    -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667])], [(yplusx: [
+    11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076,
+    -9091740, -27727044, 11358504], yminusx: [-12730809, 10311867, 1510375,
+    10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768], xy2d: [
+    -19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114,
+    -19414307, -15621255]), (yplusx: [6490081, 11940286, 25495923, -7726360,
+                                      8668373, -8751316, 3367603, 6970005,
+                                      -1691065, -9004790], yminusx: [1656497,
+    13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723,
+    -16796596, -5031438], xy2d: [-22273315, -13524424, -64685, -4334223,
+                                 -18605636, -10921968, -20571065, -7007978,
+                                 -99853, -10237333]), (yplusx: [17747465,
+    10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976,
+    -29260363, -5511971], yminusx: [31932027, -4986141, -19612382, 16366580,
+                                    22023614, 88450, 11371999, -3744247,
+                                    4882242, -10626905], xy2d: [29796507, 37186,
+    19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932,
+    -4162409]), (yplusx: [12501286, 4044383, -8612957, -13392385, -32430052,
+                          5136599, -19230378, -3529697, 330070, -3659409], yminusx: [
+    6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892,
+    -271295, 12071499], xy2d: [-8365515, -4042521, 25133448, -4517355, -6211027,
+                               2265927, -32769618, 1936675, -5159697, 3829363]), (yplusx: [
+    28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550,
+    -6567787, 26333140, 14267664], yminusx: [-11067219, 11871231, 27385719,
+    -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324], xy2d: [
+    -21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940,
+    4757911, -26491501, -16408940]), (yplusx: [13537262, -7759490, -20604840,
+    10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990], yminusx: [
+    -17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833,
+    -1956526, -1776914], xy2d: [-25045300, -10191966, 15366585, 15166509,
+                                -13105086, 8423556, -29171540, 12361135,
+                                -18685978, 4578290]), (yplusx: [24579768,
+    3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919,
+    21964432, 8235257], yminusx: [-6528613, -2411497, 9442966, -5925588,
+                                  12025640, -1487420, -2981514, -1669206,
+                                  13006806, 2355433], xy2d: [-16304899,
+    -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366,
+    1141648, -12796236]), (yplusx: [-12863944, -13219986, -8318266, -11018091,
+                                    -6810145, -4843894, 13475066, -3133972,
+                                    32674895, 13715045], yminusx: [11423335,
+    -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212,
+    -28740881, -15642093], xy2d: [-1409668, 12530728, -6368726, 10847387,
+                                  19531186, -14132160, -11709148, 7791794,
+                                  -27245943, 4383347])], [(yplusx: [-28970898,
+    5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449,
+    27193557, 6245191], yminusx: [-15193956, 5362278, -1783893, 2695834,
+                                  4960227, 12840725, 23061898, 3260492,
+                                  22510453, 8577507], xy2d: [-12632451,
+    11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092,
+    -29571492, -3635906]), (yplusx: [3877321, -9572739, 32416692, 5405324,
+                                     -11004407, -13656635, 3759769, 11935320,
+                                     5611860, 8164018], yminusx: [-16275802,
+    14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289,
+    5773085, -8422109], xy2d: [-23788118, -8254300, 1950875, 8937633, 18686727,
+                               16459170, -905725, 12376320, 31632953, 190926]), (yplusx: [
+    -24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749,
+    4508564, -25341555, -3627528], yminusx: [8884438, -5884009, 6023974,
+    10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625], xy2d: [
+    -32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575,
+    -14108036, -24878478, 1541286]), (yplusx: [2901347, -1117687, 3880376,
+    -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033], yminusx: [
+    27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150,
+    -5016058, 29439641, 15138866], xy2d: [21536104, -6626420, -32447818,
+    -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896]), (yplusx: [
+    30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390,
+    12180118, 23177719, -554075], yminusx: [26572847, 3405927, -31701700,
+    12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347], xy2d: [
+    -22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434,
+    -12731527, -17717757, -5461437]), (yplusx: [-5056483, 16566551, 15953661,
+    3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165], yminusx: [
+    -18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109,
+    -3582739, -23260460, -8428588], xy2d: [-32480551, 15707275, -8205912,
+    -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193]), (yplusx: [
+    -19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482,
+    16529112, 8742704, 12967017], yminusx: [-28464899, 1553205, 32536856,
+    -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883], xy2d: [
+    21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274,
+    19375923, -12647961]), (yplusx: [8832269, -14495485, 13253511, 5137575,
+                                     5037871, 4078777, 24880818, -6222716,
+                                     2862653, 9455043], yminusx: [29306751,
+    5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080,
+    15511449, 4789663], xy2d: [-20679756, 7004547, 8824831, -9434977, -4045704,
+                               -3750736, -5754762, 108893, 23513200, 16652362])], [(yplusx: [
+    -33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416,
+    -12936300, -18319198, 10212860], yminusx: [2756081, 8598110, 7383731,
+    -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466], xy2d: [
+    -24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424,
+    864440, -2499677, -16710063]), (yplusx: [-26432803, 6148329, -17184412,
+    -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997], yminusx: [
+    -1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126,
+    8518463, 26699843, 5276295], xy2d: [-13149873, -6429067, 9396249, 365013,
+                                        24703301, -10488939, 1321586, 149635,
+                                        -15452774, 7159369]), (yplusx: [9987780,
+    -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218,
+    -8403385], yminusx: [18155857, -16504990, 19744716, 9006923, 15154154,
+                         -10538976, 24256460, -4864995, -22548173, 9334109], xy2d: [
+    2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845,
+    14253545, -22587149, 536906]), (yplusx: [4377756, 8115836, 24567078,
+    15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424], yminusx: [
+    -19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826,
+    -15796950, 6378260, 699185], xy2d: [7895026, 4057113, -7081772, -13077756,
+                                        -17886831, -323126, -716039, 15693155,
+                                        -5045064, -13373962]), (yplusx: [
+    -7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678,
+    -10962840, -3918636, -9669325], yminusx: [10188286, -15770834, -7336361,
+    13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593], xy2d: [
+    696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490,
+    -4578720, 19236243, 12477404]), (yplusx: [-11229439, 11243796, -17054270,
+    -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644], yminusx: [
+    17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177,
+    -10538171, 10322027, 15313801], xy2d: [26246234, 11968874, 32263343,
+    -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804]), (yplusx: [
+    -31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212,
+    16484931, 25180797, -5334884], yminusx: [-586574, 10376444, -32586414,
+    -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577], xy2d: [
+    -9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178,
+    -7515054, 30696930, -3712849]), (yplusx: [32988917, -9603412, 12499366,
+    7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473], yminusx: [
+    -8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476,
+    -9134995, 25112947, -2926644], xy2d: [-2504044, -436966, 25621774, -5678772,
+    15085042, -5479877, -24884878, -13526194, 5537438, -13914319])], [(yplusx: [
+    -11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251,
+    -1729667, 31234590, 6090599], yminusx: [-9633316, 116426, 26083934, 2897444,
+    -6364437, -2688086, 609721, 15878753, -6970405, -9034768], xy2d: [-27757857,
+    247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646,
+    20650474, 1804084]), (yplusx: [-27589786, 15456424, 8972517, 8469608,
+                                   15640622, 4439847, 3121995, -10329713,
+                                   27842616, -202328], yminusx: [-15306973,
+    2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082,
+    12714369], xy2d: [20807691, -7270825, 29286141, 11421711, -27876523,
+                      -13868230, -21227475, 1035546, -19733229, 12796920]), (yplusx: [
+    12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495,
+    -12899438, 3480665, -15182815], yminusx: [-32361549, 5457597, 28548107,
+    7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025], xy2d: [
+    -21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485,
+    -4210226, -24552282, 15673397]), (yplusx: [-20184622, 2338216, 19788685,
+    -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448], yminusx: [
+    6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683,
+    31123697, -10958981], xy2d: [30069250, -11435332, 30434654, 2958439,
+                                 18399564, -976289, 12296869, 9204260,
+                                 -16432438, 9648165]), (yplusx: [32705432,
+    -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604,
+    -26008332, -11377501], yminusx: [17219865, 2375039, -31570947, -5575615,
+                                     -19459679, 9219903, 294711, 15298639,
+                                     2662509, -16297073], xy2d: [-1172927,
+    -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777,
+    32247248, -14389861]), (yplusx: [14312628, 1221556, 17395390, -8700143,
+                                     -4945741, -8684635, -28197744, -9637817,
+                                     -16027623, -13378845], yminusx: [-1428825,
+    -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934,
+    2346211], xy2d: [18510800, 15337574, 26171504, 981392, -22241552, 7827556,
+                     -23491134, -11323352, 3059833, -11782870]), (yplusx: [
+    10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636,
+    -5544586, -33502212, 3592096], yminusx: [33114168, -15889352, -26525686,
+    -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803], xy2d: [
+    -32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686,
+    3891704, 26353178, 693168]), (yplusx: [30374239, 1595580, -16884039,
+    13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965], yminusx: [
+    -14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230,
+    -13108839, 17901441, 16011505], xy2d: [18171223, -11934626, -12500402,
+    15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598])], [(yplusx: [
+    5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757,
+    1228319, 17544096, -10593782], yminusx: [5811932, -1715293, 3442887,
+    -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900], xy2d: [
+    -31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353,
+    8141295, -10632534, -585479]), (yplusx: [-12675304, 694026, -5076145,
+    13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208], yminusx: [
+    8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152,
+    2488540, 23550156, -271232], xy2d: [17294316, -3788438, 7026748, 15626851,
+                                        22990044, 113481, 2267737, -5908146,
+                                        -408818, -137719]), (yplusx: [16091085,
+    -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936,
+    3260525, -7166271], yminusx: [-4910104, -13332887, 18550887, 10864893,
+                                  -16459325, -7291596, -23028869, -13204905,
+                                  -12748722, 2701326], xy2d: [-8574695,
+    16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971,
+    11329923, 1862132]), (yplusx: [14763076, -15903608, -30918270, 3689867,
+                                   3511892, 10313526, -21951088, 12219231,
+                                   -9037963, -940300], yminusx: [8894987,
+    -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717,
+    -15438168, 11595570], xy2d: [15214962, 3537601, -26238722, -14058872,
+                                 4418657, -15230761, 13947276, 10730794,
+                                 -13489462, -4363670]), (yplusx: [-2538306,
+    7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635,
+    977108, 699994], yminusx: [-12466472, 4195084, -9211532, 550904, -15565337,
+                               12917920, 19118110, -439841, -30534533, -14337913], xy2d: [
+    31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237,
+    -10051775, 12493932, -5409317]), (yplusx: [-25680606, 5260744, -19235809,
+    -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730], yminusx: [
+    842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880,
+    6985184, -9940361, 2854096], xy2d: [-4847262, -7969331, 2516242, -5847713,
+                                        9695691, -7221186, 16512645, 960770,
+                                        12121869, 16648078]), (yplusx: [
+    -15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922,
+    -7882064, 20237806, 2838411], yminusx: [-19288047, 4453152, 15298546,
+    -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905], xy2d: [
+    -9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907,
+    -2630053, 12521378, 4845654]), (yplusx: [-28198521, 10744108, -2958380,
+    10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870], yminusx: [
+    -23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734,
+    -1240216, -3113227, 13974498], xy2d: [12966261, 15550616, -32038948,
+    -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579])], [(yplusx: [
+    14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140,
+    789443, 32195181, 3895677], yminusx: [10758205, 15755439, -4509950, 9243698,
+    -4879422, 6879879, -2204575, -3566119, -8982069, 4429647], xy2d: [-2453894,
+    15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895,
+    18047436, -15281743]), (yplusx: [-25173001, -11307165, 29759956, 11776784,
+                                     -22262383, -15820455, 10993114, -12850837,
+                                     -17620701, -9408468], yminusx: [21987233,
+    700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431,
+    -29958985, 8773375], xy2d: [-25568350, 454463, -13211935, 16126715,
+                                25240068, 8594567, 20656846, 12017935, -7874389,
+                                -13920155]), (yplusx: [6028182, 6263078,
+    -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788,
+    -2776725], yminusx: [-12278994, 16624277, 987579, -5922598, 32908203,
+                         1248608, 7719845, -4166698, 28408820, 6816612], xy2d: [
+    -10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181,
+    13982702, -10339570, 5067943]), (yplusx: [-30505967, -3821767, 12074681,
+    13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944], yminusx: [
+    30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793,
+    -12570394, 27679908, -1648928], xy2d: [9402404, -13957065, 32834043,
+    10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406]), (yplusx: [
+    22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625,
+    -4648942, 4854859, 6622139], yminusx: [-8310738, -2953450, -8262579,
+    -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963], xy2d: [
+    -31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365,
+    -11621720, -15405155, 11020693]), (yplusx: [1866042, -7949489, -7898649,
+    -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734], yminusx: [
+    -448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585,
+    -4347088, 25577411, -13378680], xy2d: [-24290378, 4759345, -690653,
+    -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410]), (yplusx: [
+    -9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008,
+    -11311852, 10931924, -11931931], yminusx: [-16561513, 14112680, -8012645,
+    4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654], xy2d: [
+    22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144,
+    -12654326, 28445307, -5364710]), (yplusx: [29875063, 12493613, 2795536,
+    -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180], yminusx: [
+    -26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888,
+    -9535498, 3843903, 9367684], xy2d: [-10969595, -6403711, 9591134, 9582310,
+                                        11349256, 108879, 16235123, 8601684,
+                                        -139197, 4242895])], [(yplusx: [
+    22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341,
+    2470660, -27417366, 16625501], yminusx: [-11057722, 3042016, 13770083,
+    -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413], xy2d: [
+    6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807,
+    14290061, 27108877, -1180880]), (yplusx: [-8586597, -7170966, 13241782,
+    10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874], yminusx: [
+    22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859,
+    -13970780, -10479804, -16197962], xy2d: [-7768587, 3326786, -28111797,
+    10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899]), (yplusx: [
+    21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224,
+    -2709232, 20491983, -8042152], yminusx: [9209270, -15135055, -13256557,
+    -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063], xy2d: [
+    7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445,
+    -2321576, 17649998, -250080]), (yplusx: [-9301088, -14193827, 30609526,
+    -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146], yminusx: [
+    -17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080,
+    -8472199, -3174674, 3440183], xy2d: [-19889700, -5977008, -24111293,
+    -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133]), (yplusx: [
+    -32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061,
+    311861, -30594991, -7379421], yminusx: [-3773428, -1565936, 28985340,
+    7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622], xy2d: [
+    -4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598,
+    843523, -21875062, 13626197]), (yplusx: [2281448, -13487055, -10915418,
+    -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663], yminusx: [
+    31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894,
+    -7014826, -23452306, 5964753], xy2d: [4100420, -5959452, -17179337, 6017714,
+    -18705837, 12227141, -26684835, 11344144, 2538215, -7570755]), (yplusx: [
+    -9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983,
+    1485421, -629256, -15958862], yminusx: [-26804558, 4260919, 11851389,
+    9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118], xy2d: [
+    26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568,
+    -10170080, 33100372, -1306171]), (yplusx: [15121113, -5201871, -10389905,
+    15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380], yminusx: [
+    16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060,
+    -16254968, -10735770, -10039824], xy2d: [28042865, -3557089, -12126526,
+    12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270])], [(yplusx: [
+    -817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332,
+    -6159431, -14117438], yminusx: [-31031306, -14256194, 17332029, -2383520,
+                                    31312682, -5967183, 696309, 50292,
+                                    -20095739, 11763584], xy2d: [-594563,
+    -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632,
+    -19773211, -10713562]), (yplusx: [30464590, -11262872, -4127476, -12734478,
+                                      19835327, -7105613, -24396175, 2075773,
+                                      -17020157, 992471], yminusx: [18357185,
+    -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033,
+    -11574335, -10601610], xy2d: [19598397, 10334610, 12555054, 2555664,
+                                  18821899, -10339780, 21873263, 16014234,
+                                  26224780, 16452269]), (yplusx: [-30223925,
+    5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186,
+    -20533829, 3698650], yminusx: [14187449, 3448569, -10636236, -10810935,
+                                   -22663880, -3433596, 7268410, -10890444,
+                                   27394301, 12015369], xy2d: [19695761,
+    16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777,
+    -13259127, -3402461]), (yplusx: [30860103, 12735208, -1888245, -4699734,
+                                     -16974906, 2256940, -8166013, 12298312,
+                                     -8550524, -10393462], yminusx: [-5719826,
+    -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654,
+    -4976164, 12651793], xy2d: [-2848395, 9953421, 11531313, -5282879, 26895123,
+                                -12697089, -13118820, -16517902, 9768698,
+                                -2533218]), (yplusx: [-24719459, 1894651,
+    -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226], yminusx: [
+    18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882,
+    13944024, -24372348, 16582019], xy2d: [-15504260, 4970268, -29893044,
+    4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037]), (yplusx: [
+    31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269,
+    6200206, -19686113, -14800171], yminusx: [-17308668, -15879940, -31522777,
+    -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132], xy2d: [
+    -28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981,
+    4364038, 1155602, 5988841]), (yplusx: [21890435, -13272907, -12624011,
+    12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181], yminusx: [
+    -33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187,
+    -7025928, 1466169, 10740210], xy2d: [-1509399, -15488185, -13503385,
+    -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040]), (yplusx: [
+    3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327,
+    951507, -3260321, -573935], yminusx: [24740841, 5052253, -30094131, 8961361,
+    25877428, 6165135, -24368180, 14397372, -7380369, -6144105], xy2d: [
+    -28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463,
+    -14453128, -1625486, -6494814])], [(yplusx: [793299, -9230478, 8836302,
+    -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852], yminusx: [
+    5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826,
+    -6171428, -15186581], xy2d: [-4859255, -3779343, -2917758, -6748019,
+                                 7778750, 11688288, -30404353, -9871238,
+                                 -1558923, -9863646]), (yplusx: [10896332,
+    -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476,
+    -15757844], yminusx: [10566929, 12612572, -31944212, 11118703, -12633376,
+                          12362879, 21752402, 8822496, 24003793, 14264025], xy2d: [
+    27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875,
+    -13117525, 13958495, -5732453]), (yplusx: [-23481610, 4867226, -27247128,
+    3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068], yminusx: [
+    4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726,
+    -1381061, -15066784, -10375192], xy2d: [-17270517, 12723032, -16993061,
+    14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921]), (yplusx: [
+    -9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045,
+    -9017955, 5002294, -15550259], yminusx: [-12057553, -11177906, 21115585,
+    -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426], xy2d: [
+    -5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472,
+    15852464, 28834118, -7646072]), (yplusx: [-17335748, -9107057, -24531279,
+    9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305], yminusx: [
+    13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986,
+    11293807, -28588204, -9421832], xy2d: [28497928, 6272777, -33022994,
+    14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943]), (yplusx: [
+    -16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600,
+    -13175392, 22853429, -4012011], yminusx: [24191378, 16712145, -13931797,
+    15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447], xy2d: [
+    17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397,
+    16031844, 3723494]), (yplusx: [-28632773, 12763728, -20446446, 7577504,
+                                   33001348, -13017745, 17558842, -7872890,
+                                   23896954, -4314245], yminusx: [-20005381,
+    -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646,
+    -8826859], xy2d: [28816045, 298879, -28165016, -15920938, 19000928,
+                      -1665890, -12680833, -2949325, -18051778, -2082915]), (yplusx: [
+    16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740,
+    16041268, -19715240, 7847707], yminusx: [10151868, 10572098, 27312476,
+    7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848], xy2d: [
+    -11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493,
+    -15932110, 29330899, -15076224])], [(yplusx: [-25499735, -4378794,
+    -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391], yminusx: [
+    15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435,
+    15921866, 16103996, -3731215], xy2d: [-23169824, -10781249, 13588192,
+    -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101]), (yplusx: [
+    23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856,
+    8911517, -25205859, 2739713], yminusx: [21374101, -3554250, -33524649,
+    9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849], xy2d: [
+    -7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388,
+    -30076310, 10117930]), (yplusx: [-29501170, -10744872, -26163768, 13051539,
+                                     -25625564, 5089643, -6325503, 6704079,
+                                     12890019, 15728940], yminusx: [-21972360,
+    -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139,
+    12885167, 8311031], xy2d: [-17516482, 5352194, 10384213, -13811658, 7506451,
+                               13453191, 26423267, 4384730, 1888765, -5435404]), (yplusx: [
+    -25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644,
+    -12707869, -19464434, -3340243], yminusx: [-23607977, -2665774, -526091,
+    4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116], xy2d: [
+    -24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805,
+    -7087279, -16866484, 16176525]), (yplusx: [-23583256, 6564961, 20063689,
+    3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509], yminusx: [
+    -10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037,
+    -1940610, 32808310, 1099883], xy2d: [15030977, 5768825, -27451236, -2887299,
+    -6427378, -15361371, -15277896, -6809350, 2051441, -15225865]), (yplusx: [
+    -3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188,
+    -22686354, 16633660], yminusx: [4577086, -16752288, 13249841, -15304328,
+                                    19958763, -14537274, 18559670, -10759549,
+                                    8402478, -9864273], xy2d: [-28406330,
+    -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072,
+    17983010, 9967138]), (yplusx: [-25762494, 6524722, 26585488, 9969270,
+                                   24709298, 1220360, -1677990, 7806337,
+                                   17507396, 3651560], yminusx: [-10420457,
+    -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557,
+    -18553322, -11357135], xy2d: [2839101, 14284142, 4029895, 3472686, 14402957,
+                                  12689363, -26642121, 8459447, -5605463,
+                                  -7621941]), (yplusx: [-4839289, -3535444,
+    9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739], yminusx: [
+    18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533,
+    -15217008, 26908270, 12150756], xy2d: [-30264870, -7647865, 5112249,
+    -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819])], [(yplusx: [
+    -6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489,
+    12532905, -7503072, -8675347], yminusx: [-27343522, -16515468, -27151524,
+    -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028], xy2d: [
+    21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949,
+    -6215466, -3556191, -7913075]), (yplusx: [16544754, 13250366, -16804428,
+    15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799], yminusx: [
+    -2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651,
+    16690659, 25459437, -4564609], xy2d: [-25144690, 11425020, 28423002,
+    -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817]), (yplusx: [
+    -23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225,
+    -16344658, 6335692, 7249989], yminusx: [-30333227, 13979675, 7503222,
+    -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523], xy2d: [
+    4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016,
+    -10598955, 31820368, 15075278]), (yplusx: [31879134, -8918693, 17258761,
+    90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045], yminusx: [
+    19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190,
+    2074449, -9413939, 14905377], xy2d: [24483667, -11935567, -2518866,
+    -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480]), (yplusx: [
+    17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582,
+    -14110875, 15297016], yminusx: [510886, 14337390, -31785257, 16638632,
+                                    6328095, 2713355, -20217417, -11864220,
+                                    8683221, 2921426], xy2d: [18606791,
+    11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924,
+    4674690, 13890525]), (yplusx: [13609624, 13069022, -27372361, -13055908,
+                                   24360586, 9592974, 14977157, 9835105,
+                                   4389687, 288396], yminusx: [9922506, -519394,
+    13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070,
+    16052080], xy2d: [12720016, 11937594, -31970060, -5028689, 26900120,
+                      8561328, -20155687, -11632979, -14754271, -10812892]), (yplusx: [
+    15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573,
+    7467844, -28822128, 929275], yminusx: [11038231, -11582396, -27310482,
+    -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074], xy2d: [
+    20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261,
+    -9658066, 2463391, -4622140]), (yplusx: [-16358878, -12663911, -12065183,
+    4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717], yminusx: [
+    -1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514,
+    -9103726, 7903886, 2348101], xy2d: [24536016, -16515207, 12715592, -3862155,
+                                        1511293, 10047386, -3842346, -7129159,
+                                        -28377538, 10048127])], [(yplusx: [
+    -12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298,
+    -7297090, -32297756, 15221632], yminusx: [-26478122, -11103864, 11546244,
+    -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415], xy2d: [
+    -31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345,
+    -6118678, 30958054, 8292160]), (yplusx: [31429822, -13959116, 29173532,
+    15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876], yminusx: [
+    22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433,
+    -3758243, -2304625], xy2d: [-15491917, 8012313, -2514730, -12702462,
+                                -23965846, -10254029, -1612713, -1535569,
+                                -16664475, 8194478]), (yplusx: [27338066,
+    -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376,
+    28572286, 3005164], yminusx: [26287124, 4821776, 25476601, -4145903,
+                                  -3764513, -15788984, -18008582, 1182479,
+                                  -26094821, -13079595], xy2d: [-7171154,
+    3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627,
+    32208683, -1198248]), (yplusx: [-16657702, 2817643, -10286362, 14811298,
+                                    6024667, 13349505, -27315504, -10497842,
+                                    -27672585, -11539858], yminusx: [15941029,
+    -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429,
+    15397331, -4130193], xy2d: [8934485, -13485467, -23286397, -13423241,
+                                -32446090, 14047986, 31170398, -1441021,
+                                -27505566, 15087184]), (yplusx: [-18357243,
+    -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896,
+    16788528, -5868942], yminusx: [-1947386, 16013773, 21750665, 3714552,
+                                   -17401782, -16055433, -3770287, -10323320,
+                                   31322514, -11615635], xy2d: [21426655,
+    -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414,
+    13040862, -12112948]), (yplusx: [11293895, 12478086, -27136401, 15083750,
+                                     -29307421, 14748872, 14555558, -13417103,
+                                     1613711, 4896935], yminusx: [-25894883,
+    15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045,
+    -23971776, -11267415], xy2d: [-15924766, -5229880, -17443532, 6410664,
+                                  3622847, 10243618, 20615400, 12405433,
+                                  -23753030, -8436416]), (yplusx: [-7091295,
+    12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030,
+    23097949, -566018], yminusx: [4565804, -16025654, 20084412, -7842817,
+                                  1724999, 189254, 24767264, 10103221,
+                                  -18512313, 2424778], xy2d: [366633, -11976806,
+    8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659]), (yplusx: [
+    -24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697,
+    -15326504, -3141501, 11179385], yminusx: [18289522, -14724954, 8056945,
+    16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503], xy2d: [
+    476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813,
+    11052904, 5219329])], [(yplusx: [20678546, -8375738, -32671898, 8849123,
+                                     -5009758, 14574752, 31186971, -3973730,
+                                     9014762, -8579056], yminusx: [-13644050,
+    -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280,
+    8473550, -3256838], xy2d: [24900749, 14435722, 17209120, -15292541,
+                               -22592275, 9878983, -7689309, -16335821,
+                               -24568481, 11788948]), (yplusx: [-3118155,
+    -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733,
+    -24568470, -1458691], yminusx: [-15659161, 16736706, -22467150, 10215878,
+                                    -9097177, 7563911, 11871841, -12505194,
+                                    -18513325, 8464118], xy2d: [-23400612,
+    8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612,
+    33313881, -8370517]), (yplusx: [-20186973, -4967935, 22367356, 5271547,
+                                    -1097117, -4788838, -24805667, -10236854,
+                                    -8940735, -5818269], yminusx: [-6948785,
+    -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188,
+    28358192, -4253904], xy2d: [-23561781, -2799059, -32351682, -1661963,
+                                -9147719, 10429267, -16637684, 4072016,
+                                -5351664, 5596589]), (yplusx: [-28236598,
+    -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301,
+    15373193], yminusx: [-7243358, -3246960, -4593467, -7553353, -127927,
+                         -912245, -1090902, -4504991, -24660491, 3442910], xy2d: [
+    -30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931,
+    7176455, -18585478, 13365930]), (yplusx: [-7877390, -1499958, 8324673,
+    4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667], yminusx: [
+    25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793,
+    -11823784, 15723479, -15163481], xy2d: [-9660625, 12374379, -27006999,
+    -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876]), (yplusx: [
+    22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881,
+    7315967, 16648397, 7605640], yminusx: [-8081308, -8464597, -8223311,
+    9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278], xy2d: [
+    -21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447,
+    -7764523, -11356529, 728112]), (yplusx: [26047220, -11751471, -6900323,
+    -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272], yminusx: [
+    17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007,
+    12327945, 10750447, 10014012], xy2d: [-10312768, 3936952, 9156313, -8897683,
+    16498692, -994647, -27481051, -666732, 3424691, 7540221]), (yplusx: [
+    30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422,
+    -16317219, -9244265, 15258046], yminusx: [13054562, -2779497, 19155474,
+    469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345], xy2d: [
+    -19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489,
+    12194497, 32960380, 1459310])], [(yplusx: [19852034, 7027924, 23669353,
+    10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937], yminusx: [
+    31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486,
+    -7584354, -6643087, -5442636], xy2d: [-9192165, -2347377, -1997099, 4529534,
+    25766844, 607986, -13222, 9677543, -32294889, -6456008]), (yplusx: [
+    -2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579,
+    -7839692, -7852844, -8138429], yminusx: [-15236356, -15433509, 7766470,
+    746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576], xy2d: [
+    31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973,
+    -7337524, 31809243, 7347066]), (yplusx: [-9606723, -11874240, 20414459,
+    13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490], yminusx: [
+    -12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330,
+    12694420, 33473243, -13382104], xy2d: [33184999, 11180355, 15832085,
+    -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053]), (yplusx: [
+    31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208,
+    13685227, 27595050, 8737275], yminusx: [-20318852, -15150239, 10933843,
+    -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511], xy2d: [
+    22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766,
+    -4286747, -13327787, -7515095]), (yplusx: [-28017847, 9834845, 18617207,
+    -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439], yminusx: [
+    23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882,
+    -1426096, 8236921, 16492939], xy2d: [-23910559, -13515526, -26299483,
+    -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424]), (yplusx: [
+    2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700,
+    29955601, -11678310], yminusx: [3096359, 9271816, -21620864, -15521844,
+                                    -14847996, -7592937, -25892142, -12635595,
+                                    -9917575, 6216608], xy2d: [-32615849,
+    338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567,
+    -26767480, 7525079]), (yplusx: [-23066649, -13985623, 16133487, -7896178,
+                                    -3389565, 778788, -910336, -2782495,
+                                    -19386633, 11994101], yminusx: [21691500,
+    -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258,
+    -7477437, 13381418], xy2d: [18445390, -4202236, 14979846, 11622458,
+                                -1727110, -3582980, 23111648, -6375247,
+                                28535282, 15779576]), (yplusx: [30098053,
+    3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730,
+    9955285, -16303356], yminusx: [9734894, -14576830, -7473633, -9138735,
+                                   2060392, 11313496, -18426029, 9924399,
+                                   20194861, 13380996], xy2d: [-26378102,
+    -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771,
+    26342023, 10146099])], [(yplusx: [-26016874, -219943, 21339191, -41388,
+                                      19745256, -2878700, -29637280, 2227040,
+                                      21612326, -545728], yminusx: [-13077387,
+    1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797,
+    -20856566, 11649658], xy2d: [-10031494, 11262626, 27384172, 2271902,
+                                 26947504, -15997771, 39944, 6114064, 33514190,
+                                 2333242]), (yplusx: [-21433588, -12421821,
+    8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578,
+    -13450001], yminusx: [-4116307, -11271533, -23886186, 4843615, -30088339,
+                          690623, -31536088, -10406836, 8317860, 12352766], xy2d: [
+    18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096,
+    -2287550, 20712163, 6719373]), (yplusx: [26656208, 6075253, -7858556,
+    1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458], yminusx: [
+    -17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352,
+    9493610, 18620611, -16428628], xy2d: [-13323321, 13325349, 11432106,
+    5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657]), (yplusx: [
+    -23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509,
+    -5240639, 13735342, 1934062], yminusx: [25089769, 6742589, 17081145,
+    -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616], xy2d: [
+    31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085,
+    12469656, 29111212, -5451014]), (yplusx: [24244947, -15050407, -26262976,
+    2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383], yminusx: [
+    -25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251,
+    -5915248, 15766062, 8407814], xy2d: [-20406999, 13990231, 15495425,
+    16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718]), (yplusx: [
+    30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587,
+    5096219, 22740376, -7303417], yminusx: [2041139, -14256350, 7783687,
+    13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222], xy2d: [
+    33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195,
+    -4612972, -4451357, -14669444]), (yplusx: [-20045281, 5454097, -14346548,
+    6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597], yminusx: [
+    23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528,
+    -1694323, -33502340, -14767970], xy2d: [1439958, -16270480, -1079989,
+    -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799]), (yplusx: [
+    -5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026,
+    926050, -1684339, -13333647], yminusx: [13908495, -3549272, 30919928,
+    -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511], xy2d: [
+    -29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163,
+    8839127, 27485041, 7356032])], [(yplusx: [9661027, 705443, 11980065,
+    -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834], yminusx: [
+    -23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972,
+    14150565, 15970762, 4099461], xy2d: [29262576, 16756590, 26350592, -8793563,
+    8529671, -11208050, 13617293, -9937143, 11465739, 8317062]), (yplusx: [
+    -25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637,
+    3848455, 20969334, -5157516], yminusx: [-20384450, -14347713, -18336405,
+    13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547], xy2d: [
+    -24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641,
+    2581286, -28487508, 9930240]), (yplusx: [-17751622, -2097826, 16544300,
+    -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038], yminusx: [
+    -33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617,
+    4368891, 9788741], xy2d: [16660756, 7281060, -10830758, 12911820, 20108584,
+                              -8101676, -21722536, -8613148, 16250552, -11111103]), (yplusx: [
+    -19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584,
+    10604807, -30190403, 4782747], yminusx: [-1354539, 14736941, -7367442,
+    -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323], xy2d: [
+    31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084,
+    2786261, -30633590, -14097016]), (yplusx: [-14467279, -683715, -33374107,
+    7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373], yminusx: [
+    15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177,
+    15496498, -29380133, 11754228], xy2d: [-2637277, -13483075, 8488727,
+    -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141]), (yplusx: [
+    16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185,
+    -12227393, 32851222, 11717399], yminusx: [11166634, 7338049, -6722523,
+    4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831], xy2d: [
+    -185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652,
+    6546660, -19985279, -3948376]), (yplusx: [-32460596, 11266712, -11197107,
+    -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313], yminusx: [
+    -18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347,
+    -16049879, 10928917, 3011958], xy2d: [-6957757, -15594337, 31696059, 334240,
+    29576716, 14796075, -30831056, -12805180, 18008031, 10258577]), (yplusx: [
+    -22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465,
+    1367120, 25127874, 6671743], yminusx: [29701166, -14373934, -10878120,
+    9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684], xy2d: [
+    -20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147,
+    -13900640, 18423289, 4177476])]]
+
+ + +Source   +Edit   + +
+
+
+
BiPrecomp = [(yplusx: [25967493, -14356035, 29566456, 3660896, -12694345,
+                       4014787, 27544626, -11754271, -6079156, 2047605], yminusx: [
+    -12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384,
+    19500929, -15469378], xy2d: [-8738181, 4489570, 9688441, -14785194,
+                                 10184609, -12363380, 29287919, 11864899,
+                                 -24514362, -4438546]), (yplusx: [15636291,
+    -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189,
+    28944400, -1550024], yminusx: [16568933, 4717097, -11556148, -1102322,
+                                   15682896, -11807043, 16354577, -11775962,
+                                   7689662, 11199574], xy2d: [30464156,
+    -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326,
+    -17749093, -9920357]), (yplusx: [10861363, 11473154, 27284546, 1981175,
+                                     -30064349, 12577861, 32867885, 14515107,
+                                     -15438304, 10819380], yminusx: [4708026,
+    6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688,
+    -12668491, 5581306], xy2d: [19563160, 16186464, -29386857, 4097519,
+                                10237984, -4348115, 28542350, 13850243,
+                                -23678021, -15815942]), (yplusx: [5153746,
+    9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439,
+    -15175766], yminusx: [-30269007, -3463509, 7665486, 10083793, 28475525,
+                          1649722, 20654025, 16520125, 30598449, 7715701], xy2d: [
+    28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660,
+    1370708, 29794553, -1409300]), (yplusx: [-22518993, -6692182, 14201702,
+    -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877], yminusx: [
+    -6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028,
+    -7212327, 18853322, -14220951], xy2d: [4566830, -12963868, -28974889,
+    -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784]), (yplusx: [
+    -25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364,
+    -663000, -31111463, -16132436], yminusx: [25576264, -2703214, 7349804,
+    -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918], xy2d: [
+    23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339,
+    -14088058, -30714912, 16193877]), (yplusx: [-33521811, 3180713, -2394130,
+    14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800], yminusx: [
+    -25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405,
+    9761698, -19827198, 630305], xy2d: [-13720693, 2639453, -24237460, -7406481,
+                                        9494427, -5774029, -6554551, -15960994,
+                                        -2449256, -14291300]), (yplusx: [
+    -3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575,
+    15033784, 25105118, -7894876], yminusx: [-24326370, 15950226, -31801215,
+    -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619], xy2d: [
+    -3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022,
+    -16236442, -32461234, -12290683])]
+
+ + +Source   +Edit   + +
+
+
+
CurveOrder = [0xED'u8, 0xD3'u8, 0xF5'u8, 0x5C'u8, 0x1A'u8, 0x63'u8, 0x12'u8,
+              0x58'u8, 0xD6'u8, 0x9C'u8, 0xF7'u8, 0xA2'u8, 0xDE'u8, 0xF9'u8,
+              0xDE'u8, 0x14'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8,
+              0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8,
+              0x00'u8, 0x00'u8, 0x00'u8, 0x10'u8]
+
+ + +Source   +Edit   + +
+
+
+
D2Const = [-21827239'i32, -5839606, -30745221, 13898782, 229458, 15978800,
+           -12551817, -6495438, 29715968, 9444199]
+
+ + +Source   +Edit   + +
+
+
+
DConst = [-10913610'i32, 13857413, -15372611, 6949391, 114729, -8787816,
+          -6275908, -3247719, -18696448, -12055116]
+
+ + +Source   +Edit   + +
+
+
+
SqrTm1 = [-32595792'i32, -7943725, 9377950, 3500415, 12389472, -272473,
+          -25146209, -2005654, 326686, 11406482]
+
+ + +Source   +Edit   + +
+
+
+
ZeroFe = [0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8,
+          0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8,
+          0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8,
+          0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8,
+          0x00'u8, 0x00'u8, 0x00'u8, 0x00'u8]
+
+ + +Source   +Edit   + +
+
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/crypto/ed25519/ed25519.html b/traffic-score-tests/libp2p/crypto/ed25519/ed25519.html new file mode 100644 index 000000000..948c6cc56 --- /dev/null +++ b/traffic-score-tests/libp2p/crypto/ed25519/ed25519.html @@ -0,0 +1,817 @@ + + + + + + + +libp2p/crypto/ed25519/ed25519 + + + + + + + + + + + + +
+
+

libp2p/crypto/ed25519/ed25519

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements ED25519. This code is a port of the public domain, "ref10" implementation of ed25519 from SUPERCOP.

+ +
+

Types

+
+
+
EdError = enum
+  EdIncorrectError
+
+ + +Source   +Edit   + +
+
+
+
EdKeyPair = object
+  seckey*: EdPrivateKey
+  pubkey*: EdPublicKey
+
+
+ + +Source   +Edit   + +
+
+
+
EdPrivateKey = object
+  data*: array[EdPrivateKeySize, byte]
+
+
+ + +Source   +Edit   + +
+
+
+
EdPublicKey = object
+  data*: array[EdPublicKeySize, byte]
+
+
+ + +Source   +Edit   + +
+
+
+
EdSignature = object
+  data*: array[EdSignatureSize, byte]
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
EdPrivateKeySize = 64
+
+ +Size in octets (bytes) of serialized ED25519 private key. +Source   +Edit   + +
+
+
+
EdPublicKeySize = 32
+
+ +Size in octets (bytes) of serialized ED25519 public key. +Source   +Edit   + +
+
+
+
EdSignatureSize = 64
+
+ +Size in octets (bytes) of serialized ED25519 signature. +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(key: EdPrivateKey): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of ED25519 private key. +Source   +Edit   + +
+
+
+
proc `$`(key: EdPublicKey): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of ED25519 private key. +Source   +Edit   + +
+
+
+
proc `$`(sig: EdSignature): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of ED25519 signature. +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(eda, edb: EdPrivateKey): bool {....raises: [], tags: [], forbids: [].}
+
+ +Compare ED25519 private key objects for equality. +Source   +Edit   + +
+
+
+
proc `==`(eda, edb: EdPublicKey): bool {....raises: [], tags: [], forbids: [].}
+
+ +Compare ED25519 public key objects for equality. +Source   +Edit   + +
+
+
+
proc `==`(eda, edb: EdSignature): bool {....raises: [], tags: [], forbids: [].}
+
+ +Compare ED25519 signature objects for equality. +Source   +Edit   + +
+
+ +
+
+
+
proc checkScalar(scalar: openArray[byte]): uint32 {....raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc clear(key: var EdPrivateKey) {....raises: [], tags: [], forbids: [].}
+
+ +Wipe and clear memory of ED25519 private key. +Source   +Edit   + +
+
+
+
proc clear(key: var EdPublicKey) {....raises: [], tags: [], forbids: [].}
+
+ +Wipe and clear memory of ED25519 public key. +Source   +Edit   + +
+
+
+
proc clear(pair: var EdKeyPair) {....raises: [], tags: [], forbids: [].}
+
+ +Wipe and clear memory of ED25519 key pair. +Source   +Edit   + +
+
+
+
proc clear(sig: var EdSignature) {....raises: [], tags: [], forbids: [].}
+
+ +Wipe and clear memory of ED25519 signature. +Source   +Edit   + +
+
+ +
+
+
+
proc getBytes(key: EdPrivateKey): seq[byte] {....raises: [], tags: [], forbids: [].}
+
+ +Serialize ED25519 private key and return it. +Source   +Edit   + +
+
+
+
proc getBytes(key: EdPublicKey): seq[byte] {....raises: [], tags: [], forbids: [].}
+
+ +Serialize ED25519 public key and return it. +Source   +Edit   + +
+
+
+
proc getBytes(sig: EdSignature): seq[byte] {....raises: [], tags: [], forbids: [].}
+
+ +Serialize ED25519 signature and return it. +Source   +Edit   + +
+
+ +
+
+
+
proc getPublicKey(key: EdPrivateKey): EdPublicKey {....raises: [], tags: [],
+    forbids: [].}
+
+ +Calculate and return ED25519 public key from private key key. +Source   +Edit   + +
+
+ +
+
+
+
proc init(key: var EdPrivateKey; data: openArray[byte]): bool {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Initialize ED25519 private key key from raw binary representation data.

+

Procedure returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(key: var EdPrivateKey; data: string): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ +

Initialize ED25519 private key key from hexadecimal string representation data.

+

Procedure returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(key: var EdPublicKey; data: openArray[byte]): bool {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Initialize ED25519 public key key from raw binary representation data.

+

Procedure returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(key: var EdPublicKey; data: string): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ +

Initialize ED25519 public key key from hexadecimal string representation data.

+

Procedure returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(sig: var EdSignature; data: openArray[byte]): bool {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Initialize ED25519 signature sig from raw binary representation data.

+

Procedure returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(sig: var EdSignature; data: string): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ +

Initialize ED25519 signature sig from hexadecimal string representation data.

+

Procedure returns true on success.

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EdPrivateKey]; data: openArray[byte]): Result[
+    EdPrivateKey, EdError] {....raises: [].}
+
+ +Initialize ED25519 private key from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EdPrivateKey]; data: string): Result[EdPrivateKey, EdError] {.
+    ...raises: [].}
+
+ +Initialize ED25519 private key from hexadecimal string representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EdPublicKey]; data: openArray[byte]): Result[EdPublicKey,
+    EdError] {....raises: [].}
+
+ +Initialize ED25519 public key from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EdPublicKey]; data: string): Result[EdPublicKey, EdError] {.
+    ...raises: [].}
+
+ +Initialize ED25519 public key from hexadecimal string representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EdSignature]; data: openArray[byte]): Result[EdSignature,
+    EdError] {....raises: [].}
+
+ +Initialize ED25519 signature from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[EdSignature]; data: string): Result[EdSignature, EdError] {.
+    ...raises: [].}
+
+ +Initialize ED25519 signature from hexadecimal string representation data and return constructed object. +Source   +Edit   + +
+
+ +
+
+
+
proc random(t: typedesc[EdKeyPair]; rng: var HmacDrbgContext): EdKeyPair {.
+    ...raises: [].}
+
+ +Generate new random ED25519 private and public keypair using OS specific CSPRNG. +Source   +Edit   + +
+
+
+
proc random(t: typedesc[EdPrivateKey]; rng: var HmacDrbgContext): EdPrivateKey {.
+    ...raises: [].}
+
+ +Generate new random ED25519 private key using the given random number generator +Source   +Edit   + +
+
+ +
+
+
+
proc sign[T: byte | char](key: EdPrivateKey; message: openArray[T]): EdSignature {.
+    ...gcsafe, noinit, ...raises: [].}
+
+ +Create ED25519 signature of data message using private key key. +Source   +Edit   + +
+
+ +
+
+
+
proc toBytes(key: EdPrivateKey; data: var openArray[byte]): int {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Serialize ED25519 private key key to raw binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store ED25519 private key.

+ +Source   +Edit   + +
+
+
+
proc toBytes(key: EdPublicKey; data: var openArray[byte]): int {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Serialize ED25519 public key key to raw binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store ED25519 public key.

+ +Source   +Edit   + +
+
+
+
proc toBytes(sig: EdSignature; data: var openArray[byte]): int {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Serialize ED25519 signature sig to raw binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store ED25519 signature.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc verify[T: byte | char](sig: EdSignature; message: openArray[T];
+                            key: EdPublicKey): bool {....raises: [].}
+
+ +

Verify ED25519 signature sig using public key key and data message.

+

Return true if message verification succeeded, false if verification failed.

+ +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/crypto/minasn1.html b/traffic-score-tests/libp2p/crypto/minasn1.html new file mode 100644 index 000000000..ff52bf73a --- /dev/null +++ b/traffic-score-tests/libp2p/crypto/minasn1.html @@ -0,0 +1,1080 @@ + + + + + + + +libp2p/crypto/minasn1 + + + + + + + + + + + + +
+
+

libp2p/crypto/minasn1

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements minimal ASN.1 encoding/decoding primitives.

+
+

Imports

+
+ ../utility +
+
+
+

Types

+
+
+
Asn1Buffer = object of RootObj
+  buffer*: seq[byte]
+  offset*: int
+  length*: int
+
+
+ +ASN.1's message representation object +Source   +Edit   + +
+
+
+
Asn1Class {.pure.} = enum
+  Universal = 0, Application = 1, ContextSpecific = 2, Private = 3
+
+ + +Source   +Edit   + +
+
+
+
Asn1Composite = object of Asn1Buffer
+  tag*: Asn1Tag
+  idx*: int
+
+
+ + +Source   +Edit   + +
+
+
+
Asn1Error {.pure.} = enum
+  Overflow, Incomplete, Indefinite, Incorrect, NoSupport, Overrun
+
+ + +Source   +Edit   + +
+
+
+
Asn1Field = object
+  klass*: Asn1Class
+  index*: int
+  offset*: int
+  length*: int
+  buffer*: seq[byte]
+  case kind*: Asn1Tag
+  of Asn1Tag.Boolean:
+      vbool*: bool
+
+  of Asn1Tag.Integer:
+      vint*: uint64
+
+  of Asn1Tag.BitString:
+      ubits*: int
+
+  else:
+      nil
+
+  
+
+ + +Source   +Edit   + +
+
+
+
Asn1Result[T] = Result[T, Asn1Error]
+
+ + +Source   +Edit   + +
+
+
+
Asn1Tag {.pure.} = enum
+  NoSupport, Boolean, Integer, BitString, OctetString, Null, Oid, Sequence,
+  Context
+
+ +Protobuf's field types enum +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
Asn1False = [0x01'u8, 0x01'u8, 0x00'u8]
+
+ +Encoded boolean FALSE. +Source   +Edit   + +
+
+
+
Asn1Null = [0x05'u8, 0x00'u8]
+
+ +Encoded NULL value. +Source   +Edit   + +
+
+
+
Asn1OidEcPublicKey = [0x2A'u8, 0x86'u8, 0x48'u8, 0xCE'u8, 0x3D'u8, 0x02'u8,
+                      0x01'u8]
+
+ +Encoded OID for Elliptic Curve Public Key (1.2.840.10045.2.1) +Source   +Edit   + +
+
+
+
Asn1OidRsaEncryption = [0x2A'u8, 0x86'u8, 0x48'u8, 0x86'u8, 0xF7'u8, 0x0D'u8,
+                        0x01'u8, 0x01'u8, 0x01'u8]
+
+ +Encoded OID for RSA Encryption (1.2.840.113549.1.1.1) +Source   +Edit   + +
+
+
+
Asn1OidSecp256k1 = [0x2B'u8, 0x81'u8, 0x04'u8, 0x00'u8, 0x0A'u8]
+
+ +Encoded OID for secp256k1 curve (1.3.132.0.10) +Source   +Edit   + +
+
+
+
Asn1OidSecp256r1 = [0x2A'u8, 0x86'u8, 0x48'u8, 0xCE'u8, 0x3D'u8, 0x03'u8,
+                    0x01'u8, 0x07'u8]
+
+ +Encoded OID for secp256r1 curve (1.2.840.10045.3.1.7) +Source   +Edit   + +
+
+
+
Asn1OidSecp384r1 = [0x2B'u8, 0x81'u8, 0x04'u8, 0x00'u8, 0x22'u8]
+
+ +Encoded OID for secp384r1 curve (1.3.132.0.34) +Source   +Edit   + +
+
+
+
Asn1OidSecp521r1 = [0x2B'u8, 0x81'u8, 0x04'u8, 0x00'u8, 0x23'u8]
+
+ +Encoded OID for secp521r1 curve (1.3.132.0.35) +Source   +Edit   + +
+
+
+
Asn1True = [0x01'u8, 0x01'u8, 0xFF'u8]
+
+ +Encoded boolean TRUE. +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(buffer: Asn1Buffer): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of buffer. +Source   +Edit   + +
+
+
+
proc `$`(field: Asn1Field): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of field. +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(field: Asn1Field; data: openArray[byte]): bool {....raises: [], tags: [],
+    forbids: [].}
+
+ +Compares field field data with data and returns true if both buffers are equal. +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeBitString(dest: var openArray[byte]; value: openArray[byte];
+                         bits = 0): int {....raises: [], tags: [], forbids: [].}
+
+ +

Encode array of bytes as ASN.1 DER BIT STRING and return number of bytes (octets) used.

+

bits number of unused bits in value. If bits == 0, all the bits from value will be used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeBoolean(dest: var openArray[byte]; value: bool): int {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Encode Nim's boolean as ASN.1 DER BOOLEAN and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeComposite(dest: var openArray[byte]; value: Asn1Composite): int {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Encode composite value and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeContextTag(dest: var openArray[byte]; value: openArray[byte];
+                          tag: int): int {....raises: [], tags: [], forbids: [].}
+
+ +

Encode ASN.1 DER CONTEXT SPECIFIC TAG tag for value value and return number of bytes (octets) used.

+

Note: Only values in 0, 15 range can be used as context tag tag values.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeInteger(dest: var openArray[byte]; value: openArray[byte]): int {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Encode big-endian binary representation of integer as ASN.1 DER INTEGER and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding WILL NOT BE stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+
+
proc asn1EncodeInteger[T: SomeUnsignedInt](dest: var openArray[byte]; value: T): int {.
+    ...raises: [].}
+
+ +

Encode Nim's unsigned integer as ASN.1 DER INTEGER and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeLength(dest: var openArray[byte]; length: uint64): int {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Encode ASN.1 DER length part of TLV triple and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode length value, then result of encoding WILL NOT BE stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeNull(dest: var openArray[byte]): int {....raises: [], tags: [],
+    forbids: [].}
+
+ +

Encode ASN.1 DER NULL and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeOctetString(dest: var openArray[byte]; value: openArray[byte]): int {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Encode array of bytes as ASN.1 DER OCTET STRING and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeOid(dest: var openArray[byte]; value: openArray[byte]): int {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Encode array of bytes value as ASN.1 DER OBJECT IDENTIFIER and return number of bytes (octets) used.

+

This procedure is useful to encode constant predefined identifiers such as asn1OidSecp256r1, asn1OidRsaEncryption.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc asn1EncodeSequence(dest: var openArray[byte]; value: openArray[byte]): int {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Encode value as ASN.1 DER SEQUENCE and return number of bytes (octets) used.

+

If length of dest is less then number of required bytes to encode value, then result of encoding will not be stored in dest but number of bytes (octets) required will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc code(tag: Asn1Tag): byte {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +Converts Nim tag enum to ASN.1 tag code. +Source   +Edit   + +
+
+ +
+
+
+
proc extend[T: Asn1Buffer | Asn1Composite](abc: var T; length: int) {.inline,
+    ...raises: [].}
+
+ +Extend buffer or composite's internal buffer by length octets. +Source   +Edit   + +
+
+ +
+
+
+
proc finish[T: Asn1Buffer | Asn1Composite](abc: var T) {.inline, ...raises: [].}
+
+ +Finishes buffer or composite and prepares it for writing. +Source   +Edit   + +
+
+ +
+
+
+
proc getBuffer(field: Asn1Field): Asn1Buffer {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Return field as Asn1Buffer to enter composite types. +Source   +Edit   + +
+
+ +
+
+
+
proc init(t: typedesc[Asn1Buffer]): Asn1Buffer {....raises: [].}
+
+ +Initialize empty Asn1Buffer. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[Asn1Buffer]; data: openArray[byte]): Asn1Buffer {.
+    ...raises: [].}
+
+ +Initialize Asn1Buffer from array of bytes data. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[Asn1Buffer]; data: string): Asn1Buffer {....raises: [].}
+
+ +Initialize Asn1Buffer from hexadecimal string data. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[Asn1Composite]; idx: int): Asn1Composite {....raises: [].}
+
+ +Initialize Asn1Composite with tag context-specific id id. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[Asn1Composite]; tag: Asn1Tag): Asn1Composite {....raises: [].}
+
+ +Initialize Asn1Composite with tag tag. +Source   +Edit   + +
+
+ +
+
+
+
proc len(field: Asn1Field): int {.inline, ...raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc len[T: Asn1Buffer | Asn1Composite](abc: T): int {.inline, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc read(ab: var Asn1Buffer): Asn1Result[Asn1Field] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Decode value part of ASN.1 TLV triplet. +Source   +Edit   + +
+
+ +
+
+
+
proc write[T: Asn1Buffer | Asn1Composite](abc: var T; tag: Asn1Tag) {....raises: [].}
+
+ +

Write empty value to buffer or composite with tag.

+

This procedure must be used to write NULL, 0 or empty BIT STRING, OCTET STRING types.

+ +Source   +Edit   + +
+
+
+
proc write[T: Asn1Buffer | Asn1Composite](abc: var T; tag: Asn1Tag;
+    value: openArray[byte]; bits = 0) {....raises: [].}
+
+ +

Write array value using tag.

+

This procedure is used to write ASN.1 INTEGER, OCTET STRING, BIT STRING or OBJECT IDENTIFIER.

+

For BIT STRING you can use bits argument to specify number of used bits.

+ +Source   +Edit   + +
+
+
+
proc write[T: Asn1Buffer | Asn1Composite](abc: var T; value: Asn1Composite) {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc write[T: Asn1Buffer | Asn1Composite](abc: var T; value: bool) {....raises: [].}
+
+ +Write bool value to buffer or composite as ASN.1 BOOLEAN. +Source   +Edit   + +
+
+
+
proc write[T: Asn1Buffer | Asn1Composite](abc: var T; value: uint64) {.
+    ...raises: [].}
+
+ +Write uint64 value to buffer or composite as ASN.1 INTEGER. +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template getPtr(field: untyped): pointer
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template isEmpty(ab: Asn1Buffer): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template isEnough(ab: Asn1Buffer; length: int64): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template toOpenArray(ab: Asn1Buffer): untyped
+
+ + +Source   +Edit   + +
+
+
+
template toOpenArray(ac: Asn1Composite): untyped
+
+ + +Source   +Edit   + +
+
+
+
template toOpenArray(af: Asn1Field): untyped
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/crypto/rsa.html b/traffic-score-tests/libp2p/crypto/rsa.html new file mode 100644 index 000000000..306c65490 --- /dev/null +++ b/traffic-score-tests/libp2p/crypto/rsa.html @@ -0,0 +1,908 @@ + + + + + + + +libp2p/crypto/rsa + + + + + + + + + + + + +
+
+

libp2p/crypto/rsa

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements constant-time RSA PKCS#1.5 DSA.

+

This module uses unmodified parts of code from BearSSL library <https://bearssl.org/> Copyright(C) 2018 Thomas Pornin <pornin@bolet.org>.

+

+
+

Imports

+
+ minasn1 +
+
+
+

Types

+
+
+
RsaError = enum
+  RsaGenError, RsaKeyIncorrectError, RsaSignatureError, RsaLowSecurityError
+
+ + +Source   +Edit   + +
+
+
+
RsaKeyPair = RsaPrivateKey
+
+ + +Source   +Edit   + +
+
+
+
RsaKP = RsaPrivateKey | RsaKeyPair
+
+ + +Source   +Edit   + +
+
+ +
+
RsaPrivateKey = ref object
+  buffer*: seq[byte]
+  seck*: rsa.RsaPrivateKey
+  pubk*: rsa.RsaPublicKey
+  pexp*: ptr byte
+  pexplen*: uint
+
+
+ + +Source   +Edit   + +
+
+
+
RsaPublicKey = ref object
+  buffer*: seq[byte]
+  key*: rsa.RsaPublicKey
+
+
+ + +Source   +Edit   + +
+
+
+
RsaResult[T] = Result[T, RsaError]
+
+ + +Source   +Edit   + +
+
+
+
RsaSignature = ref object
+  buffer*: seq[byte]
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
DefaultKeySize = 3072
+
+ +Default RSA key size in bits. +Source   +Edit   + +
+
+
+
DefaultPublicExponent = 65537'u32
+
+ +Default value for RSA public exponent. https://golang.org/src/crypto/rsa/rsa.go#226 +Source   +Edit   + +
+
+
+
MinKeySize = 2048
+
+ +Minimal allowed RSA key size in bits. https://github.com/libp2p/go-libp2p-core/blob/master/crypto/rsa_common.go#L13 +Source   +Edit   + +
+
+
+
RsaOidSha1 = [5'u, 0x0000002B, 0x0000000E, 0x00000003, 0x00000002, 0x0000001A]
+
+ +RSA PKCS#1.5 SHA-1 hash object identifier. +Source   +Edit   + +
+
+
+
RsaOidSha224 = [9'u, 0x00000060, 0x00000086, 0x00000048, 0x00000001, 0x00000065,
+                0x00000003, 0x00000004, 0x00000002, 0x00000004]
+
+ +RSA PKCS#1.5 SHA-224 hash object identifier. +Source   +Edit   + +
+
+
+
RsaOidSha256 = [9'u, 0x00000060, 0x00000086, 0x00000048, 0x00000001, 0x00000065,
+                0x00000003, 0x00000004, 0x00000002, 0x00000001]
+
+ +RSA PKCS#1.5 SHA-256 hash object identifier. +Source   +Edit   + +
+
+
+
RsaOidSha384 = [9'u, 0x00000060, 0x00000086, 0x00000048, 0x00000001, 0x00000065,
+                0x00000003, 0x00000004, 0x00000002, 0x00000002]
+
+ +RSA PKCS#1.5 SHA-384 hash object identifier. +Source   +Edit   + +
+
+
+
RsaOidSha512 = [9'u, 0x00000060, 0x00000086, 0x00000048, 0x00000001, 0x00000065,
+                0x00000003, 0x00000004, 0x00000002, 0x00000003]
+
+ +RSA PKCS#1.5 SHA-512 hash object identifier. +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(key: RsaPrivateKey): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of RSA private key. +Source   +Edit   + +
+
+
+
proc `$`(key: RsaPublicKey): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of RSA public key. +Source   +Edit   + +
+
+
+
proc `$`(sig: RsaSignature): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of RSA signature. +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(a, b: RsaPrivateKey): bool {....raises: [], tags: [], forbids: [].}
+
+ +

Compare two RSA private keys for equality.

+

Result is true if a and b are both nil or a and b are equal by value.

+ +Source   +Edit   + +
+
+
+
proc `==`(a, b: RsaPublicKey): bool {....raises: [], tags: [], forbids: [].}
+
+ +Compare two RSA public keys for equality. +Source   +Edit   + +
+
+
+
proc `==`(a, b: RsaSignature): bool {....raises: [], tags: [], forbids: [].}
+
+ +Compare two RSA signatures for equality. +Source   +Edit   + +
+
+ +
+
+
+
proc clear[T: RsaPKI | RsaKeyPair](pki: var T) {....raises: [].}
+
+ +Wipe and clear EC private key, public key or scalar object. +Source   +Edit   + +
+
+ +
+
+
+
proc copy[T: RsaPKI](key: T): T {....raises: [].}
+
+ +Create copy of RSA private key, public key or signature. +Source   +Edit   + +
+
+ +
+
+
+
proc getBytes(key: RsaPrivateKey): RsaResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize RSA private key key to ASN.1 DER binary form and return it. +Source   +Edit   + +
+
+
+
proc getBytes(key: RsaPublicKey): RsaResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize RSA public key key to ASN.1 DER binary form and return it. +Source   +Edit   + +
+
+
+
proc getBytes(sig: RsaSignature): RsaResult[seq[byte]] {....raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize RSA signature sig to raw binary form and return it. +Source   +Edit   + +
+
+ +
+
+
+
proc getPublicKey(key: RsaPrivateKey): RsaPublicKey {....raises: [], tags: [],
+    forbids: [].}
+
+ +Get RSA public key from RSA private key. +Source   +Edit   + +
+
+ +
+
+
+
proc init(key: var RsaPrivateKey; data: openArray[byte]): Result[void, Asn1Error] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Initialize RSA private key key from ASN.1 DER binary representation data.

+

Procedure returns Asn1Status.

+ +Source   +Edit   + +
+
+
+
proc init(key: var RsaPublicKey; data: openArray[byte]): Result[void, Asn1Error] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Initialize RSA public key key from ASN.1 DER binary representation data.

+

Procedure returns Asn1Status.

+ +Source   +Edit   + +
+
+
+
proc init(sig: var RsaSignature; data: openArray[byte]): Result[void, Asn1Error] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Initialize RSA signature sig from ASN.1 DER binary representation data.

+

Procedure returns Result[void, Asn1Status].

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[RsaPrivateKey]; data: openArray[byte]): RsaResult[
+    RsaPrivateKey] {....raises: [].}
+
+ +Initialize RSA private key from ASN.1 DER binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[RsaPublicKey]; data: openArray[byte]): RsaResult[
+    RsaPublicKey] {....raises: [].}
+
+ +Initialize RSA public key from ASN.1 DER binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[RsaSignature]; data: openArray[byte]): RsaResult[
+    RsaSignature] {....raises: [].}
+
+ +Initialize RSA signature from raw binary representation data and return constructed object. +Source   +Edit   + +
+
+
+
proc init[T: RsaPKI](sospk: var T; data: string): Result[void, Asn1Error] {.
+    inline, ...raises: [].}
+
+ +

Initialize EC private key, public key or scalar sospk from hexadecimal string representation data.

+

Procedure returns Result[void, Asn1Status].

+ +Source   +Edit   + +
+
+
+
proc init[T: RsaPKI](t: typedesc[T]; data: string): T {.inline, ...raises: [].}
+
+ +Initialize RSA private key, public key or signature from hexadecimal string representation data and return constructed object. +Source   +Edit   + +
+
+ +
+
+
+
proc pubkey(pair: RsaKeyPair): RsaPublicKey {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Get RSA public key from pair pair. +Source   +Edit   + +
+
+ +
+
+
+
proc random[T: RsaKP](t: typedesc[T]; rng: var HmacDrbgContext;
+                      bits = DefaultKeySize; pubexp = DefaultPublicExponent): RsaResult[
+    T] {....raises: [].}
+
+ +

Generate new random RSA private key using BearSSL's HMAC-SHA256-DRBG algorithm.

+

bits number of bits in RSA key, must be in range 2048, 4096 (default = 3072).

+

pubexp is RSA public exponent, which must be prime (default = 3).

+ +Source   +Edit   + +
+
+ +
+
+
+
proc seckey(pair: RsaKeyPair): RsaPrivateKey {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Get RSA private key from pair pair. +Source   +Edit   + +
+
+ +
+
+
+
proc sign[T: byte | char](key: RsaPrivateKey; message: openArray[T]): RsaResult[
+    RsaSignature] {....gcsafe, raises: [].}
+
+ +Get RSA PKCS1.5 signature of data message using SHA256 and private key key. +Source   +Edit   + +
+
+ +
+
+
+
proc toBytes(key: RsaPrivateKey; data: var openArray[byte]): RsaResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize RSA private key key to ASN.1 DER binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store RSA private key, or 0 if private key is is incorrect.

+ +Source   +Edit   + +
+
+
+
proc toBytes(key: RsaPublicKey; data: var openArray[byte]): RsaResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize RSA public key key to ASN.1 DER binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store RSA public key, or 0 if public key is incorrect.

+ +Source   +Edit   + +
+
+
+
proc toBytes(sig: RsaSignature; data: var openArray[byte]): RsaResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize RSA signature sig to raw binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store RSA public key, or 0 if public key is incorrect.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc verify[T: byte | char](sig: RsaSignature; message: openArray[T];
+                            pubkey: RsaPublicKey): bool {.inline, ...raises: [].}
+
+ +

Verify RSA signature sig using public key pubkey and data message.

+

Return true if message verification succeeded, false if verification failed.

+ +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template getArray(bs, os, ls: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ Asn1Error +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/crypto/secp.html b/traffic-score-tests/libp2p/crypto/secp.html new file mode 100644 index 000000000..e0c4a0c95 --- /dev/null +++ b/traffic-score-tests/libp2p/crypto/secp.html @@ -0,0 +1,795 @@ + + + + + + + +libp2p/crypto/secp + + + + + + + + + + + + +
+
+

libp2p/crypto/secp

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+
+

Types

+
+
+
SkKeyPair = distinct secp256k1.SkKeyPair
+
+ + +Source   +Edit   + +
+
+
+
SkPrivateKey = distinct secp256k1.SkSecretKey
+
+ + +Source   +Edit   + +
+
+
+
SkPublicKey = distinct secp256k1.SkPublicKey
+
+ + +Source   +Edit   + +
+
+
+
SkSignature = distinct secp256k1.SkSignature
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
SkRawPrivateKeySize = 32
+
+ +Size of private key in octets (bytes) +Source   +Edit   + +
+
+
+
SkRawPublicKeySize = 33
+
+ +Size of public key in octets (bytes) +Source   +Edit   + +
+
+
+
SkRawSignatureSize = 65
+
+ +Size of signature in octets (bytes) +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
func `$`(key: SkKeyPair): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func `$`(key: SkPrivateKey): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func `$`(key: SkPublicKey): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func `$`(key: SkSignature): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func `==`(a, b: SkKeyPair): bool {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func `==`(a, b: SkPrivateKey): bool {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func `==`(a, b: SkPublicKey): bool {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func `==`(a, b: SkSignature): bool {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func clear(key: var SkPrivateKey) {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc getBytes(key: SkPrivateKey): seq[byte] {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize Secp256k1 private key and return it. +Source   +Edit   + +
+
+
+
proc getBytes(key: SkPublicKey): seq[byte] {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize Secp256k1 public key and return it. +Source   +Edit   + +
+
+
+
proc getBytes(sig: SkSignature): seq[byte] {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Serialize Secp256k1 signature and return it. +Source   +Edit   + +
+
+ +
+
+
+
proc getPublicKey(key: SkPrivateKey): SkPublicKey {....raises: [], tags: [],
+    forbids: [].}
+
+ +Calculate and return Secp256k1 public key from private key key. +Source   +Edit   + +
+
+ +
+
+
+
proc init(key: var SkPrivateKey; data: openArray[byte]): SkResult[void] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Initialize Secp256k1 private key key from raw binary representation data. +Source   +Edit   + +
+
+
+
proc init(key: var SkPrivateKey; data: string): SkResult[void] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Initialize Secp256k1 private key key from hexadecimal string representation data. +Source   +Edit   + +
+
+
+
proc init(key: var SkPublicKey; data: openArray[byte]): SkResult[void] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Initialize Secp256k1 public key key from raw binary representation data. +Source   +Edit   + +
+
+
+
proc init(key: var SkPublicKey; data: string): SkResult[void] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Initialize Secp256k1 public key key from hexadecimal string representation data. +Source   +Edit   + +
+
+
+
proc init(sig: var SkSignature; data: openArray[byte]): SkResult[void] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Initialize Secp256k1 signature sig from raw binary representation data. +Source   +Edit   + +
+
+
+
proc init(sig: var SkSignature; data: string): SkResult[void] {....raises: [],
+    tags: [], forbids: [].}
+
+ +Initialize Secp256k1 signature sig from hexadecimal string representation data. +Source   +Edit   + +
+
+
+
proc init(t: typedesc[SkPrivateKey]; data: openArray[byte]): SkResult[
+    SkPrivateKey] {....raises: [].}
+
+ +

Initialize Secp256k1 private key from raw binary representation data.

+

Procedure returns private key on success.

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[SkPrivateKey]; data: string): SkResult[SkPrivateKey] {.
+    ...raises: [].}
+
+ +

Initialize Secp256k1 private key from hexadecimal string representation data.

+

Procedure returns private key on success.

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[SkPublicKey]; data: openArray[byte]): SkResult[SkPublicKey] {.
+    ...raises: [].}
+
+ +

Initialize Secp256k1 public key from raw binary representation data.

+

Procedure returns public key on success.

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[SkPublicKey]; data: string): SkResult[SkPublicKey] {.
+    ...raises: [].}
+
+ +

Initialize Secp256k1 public key from hexadecimal string representation data.

+

Procedure returns public key on success.

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[SkSignature]; data: openArray[byte]): SkResult[SkSignature] {.
+    ...raises: [].}
+
+ +

Initialize Secp256k1 signature from raw binary representation data.

+

Procedure returns signature on success.

+ +Source   +Edit   + +
+
+
+
proc init(t: typedesc[SkSignature]; data: string): SkResult[SkSignature] {.
+    ...raises: [].}
+
+ +

Initialize Secp256k1 signature from hexadecimal string representation data.

+

Procedure returns signature on success.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc random(t: typedesc[SkKeyPair]; rng: var HmacDrbgContext): SkKeyPair {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc random(t: typedesc[SkPrivateKey]; rng: var HmacDrbgContext): SkPrivateKey {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc sign[T: byte | char](key: SkPrivateKey; msg: openArray[T]): SkSignature {.
+    ...raises: [].}
+
+ +Sign message msg using private key key and return signature object. +Source   +Edit   + +
+
+ +
+
+
+
proc toBytes(key: SkPrivateKey; data: var openArray[byte]): SkResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize Secp256k1 private key key to raw binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store Secp256k1 private key.

+ +Source   +Edit   + +
+
+
+
proc toBytes(key: SkPublicKey; data: var openArray[byte]): SkResult[int] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +

Serialize Secp256k1 public key key to raw binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store Secp256k1 public key.

+ +Source   +Edit   + +
+
+
+
proc toBytes(sig: SkSignature; data: var openArray[byte]): int {....raises: [],
+    tags: [], forbids: [].}
+
+ +

Serialize Secp256k1 signature sig to raw binary form and store it to data.

+

Procedure returns number of bytes (octets) needed to store Secp256k1 signature.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc verify[T: byte | char](sig: SkSignature; msg: openArray[T];
+                            key: SkPublicKey): bool {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template pubkey(v: SkKeyPair): SkPublicKey
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template seckey(v: SkKeyPair): SkPrivateKey
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/dial.html b/traffic-score-tests/libp2p/dial.html new file mode 100644 index 000000000..505eae264 --- /dev/null +++ b/traffic-score-tests/libp2p/dial.html @@ -0,0 +1,330 @@ + + + + + + + +libp2p/dial + + + + + + + + + + + + +
+
+

libp2p/dial

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
Dial = ref object of RootObj
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Methods

+
+
+
+
method addTransport(self: Dial; transport: Transport) {.base, ...raises: [],
+    tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method connect(self: Dial; address: MultiAddress; allowUnknownPeerId = false): Future[
+    PeerId] {.async, base, ...raises: [], tags: [], forbids: [].}
+
+ +Connects to a peer and retrieve its PeerId +Source   +Edit   + +
+
+
+
method connect(self: Dial; peerId: PeerId; addrs: seq[MultiAddress];
+               forceDial = false; reuseConnection = true;
+               upgradeDir = Direction.Out) {.async, base, ...raises: [], tags: [],
+    forbids: [].}
+
+ +connect remote peer without negotiating a protocol +Source   +Edit   + +
+
+ +
+
+
+
method dial(self: Dial; peerId: PeerId; addrs: seq[MultiAddress];
+            protos: seq[string]; forceDial = false): Future[Connection] {.async,
+    base, ...raises: [], tags: [], forbids: [].}
+
+ +create a protocol stream and establish a connection if one doesn't exist already +Source   +Edit   + +
+
+
+
method dial(self: Dial; peerId: PeerId; protos: seq[string]): Future[Connection] {.
+    async, base, ...raises: [], tags: [], forbids: [].}
+
+ +create a protocol stream over an existing connection +Source   +Edit   + +
+
+ +
+
+
+
method tryDial(self: Dial; peerId: PeerId; addrs: seq[MultiAddress]): Future[
+    Opt[MultiAddress]] {.async, base, ...raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/dialer.html b/traffic-score-tests/libp2p/dialer.html new file mode 100644 index 000000000..6bf9bd828 --- /dev/null +++ b/traffic-score-tests/libp2p/dialer.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/dialer + + + + + + + + + + + + +
+
+

libp2p/dialer

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/errors.html b/traffic-score-tests/libp2p/errors.html new file mode 100644 index 000000000..6247c69cc --- /dev/null +++ b/traffic-score-tests/libp2p/errors.html @@ -0,0 +1,321 @@ + + + + + + + +libp2p/errors + + + + + + + + + + + + +
+
+

libp2p/errors

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+
+

Types

+
+
+
LPError = object of CatchableError
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc allFuturesThrowing[T](args: varargs[Future[T]]): Future[void]
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func toException(e: cstring): ref LPError {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func toException(e: string): ref LPError {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Macros

+
+
+
+
macro checkFutures[T](futs: seq[Future[T]]; exclude: untyped = []): untyped
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template tryAndWarn(message: static[string]; body: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/multiaddress.html b/traffic-score-tests/libp2p/multiaddress.html new file mode 100644 index 000000000..088746a44 --- /dev/null +++ b/traffic-score-tests/libp2p/multiaddress.html @@ -0,0 +1,2313 @@ + + + + + + + +libp2p/multiaddress + + + + + + + + + + + + +
+
+

libp2p/multiaddress

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements MultiAddress.

+ +
+

Types

+
+
+
IpTransportProtocol = enum
+  tcpProtocol, udpProtocol
+
+ + +Source   +Edit   + +
+
+
+
MaError = object of LPError
+
+ + +Source   +Edit   + +
+
+
+
MaInvalidAddress = object of MaError
+
+ + +Source   +Edit   + +
+
+
+
MAKind = enum
+  None, Fixed, Length, Path, Marker
+
+ + +Source   +Edit   + +
+
+
+
MaPatResult = object
+  flag*: bool
+  rem*: seq[MultiCodec]
+
+
+ + +Source   +Edit   + +
+
+
+
MaPattern = object
+  operator*: MaPatternOp
+  args*: seq[MaPattern]
+  value*: MultiCodec
+
+
+ + +Source   +Edit   + +
+
+
+
MaPatternOp = enum
+  Eq, Or, And
+
+ + +Source   +Edit   + +
+
+
+
MAProtocol = object
+  mcodec*: MultiCodec
+  size*: int
+  coder*: Transcoder
+
+
+ + +Source   +Edit   + +
+
+
+
MaResult[T] = Result[T, string]
+
+ + +Source   +Edit   + +
+
+
+
MultiAddress = object
+  
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
CircuitRelay = (operator: Eq, args: [], value: 290)
+
+ + +Source   +Edit   + +
+
+
+
DNS = (operator: Or, args: [(operator: Eq, args: [], value: 53),
+                            (operator: Eq, args: [], value: 54),
+                            (operator: Eq, args: [], value: 55),
+                            (operator: Eq, args: [], value: 56)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
DNS4 = (operator: Eq, args: [], value: 54)
+
+ + +Source   +Edit   + +
+
+
+
DNS6 = (operator: Eq, args: [], value: 55)
+
+ + +Source   +Edit   + +
+
+
+
DNS_OR_IP = (operator: Or, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                                   value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+    value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
DNSADDR = (operator: Eq, args: [], value: 56)
+
+ + +Source   +Edit   + +
+
+
+
DNSANY = (operator: Eq, args: [], value: 53)
+
+ + +Source   +Edit   + +
+
+
+
HTTP = (operator: Or, args: [(operator: And, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 6)],
+                value: 0)], value: 0), (operator: Eq, args: [], value: 480)],
+                              value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+    value: 0), (operator: Eq, args: [], value: 480)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 480)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
HTTPS = (operator: Or, args: [(operator: And, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 6)],
+                value: 0)], value: 0), (operator: Eq, args: [], value: 443)],
+                               value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+    value: 0), (operator: Eq, args: [], value: 443)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 443)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
IP = (operator: Or, args: [(operator: Eq, args: [], value: 4),
+                           (operator: Eq, args: [], value: 41)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
IP4 = (operator: Eq, args: [], value: 4)
+
+ + +Source   +Edit   + +
+
+
+
IP6 = (operator: Eq, args: [], value: 41)
+
+ + +Source   +Edit   + +
+
+
+
IPFS = (operator: And, args: [(operator: Or, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 6)],
+                value: 0)], value: 0), (operator: And, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 273)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 273)],
+                value: 0)], value: 0), (operator: Eq, args: [], value: 302)],
+                                        value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 273)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0)], value: 0),
+    (operator: Eq, args: [], value: 460)], value: 0), (operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0),
+                          (operator: Eq, args: [], value: 477)], value: 0), (
+    operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)], value: 0)], value: 0),
+                              (operator: Eq, args: [], value: 421)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
Onion3 = (operator: Eq, args: [], value: 445)
+
+ + +Source   +Edit   + +
+
+
+
P2PPattern = (operator: Eq, args: [], value: 421)
+
+ + +Source   +Edit   + +
+
+
+
QUIC = (operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0)], value: 0),
+                              (operator: Eq, args: [], value: 460)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
Reliable = (operator: Or, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 273)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0)], value: 0),
+    (operator: Eq, args: [], value: 302)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 273)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0)], value: 0),
+    (operator: Eq, args: [], value: 460)], value: 0), (operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0),
+                          (operator: Eq, args: [], value: 477)], value: 0), (
+    operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
TCP = (operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
TCP_DNS = (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                                  value: 0), (operator: Eq, args: [], value: 6)],
+           value: 0)
+
+ + +Source   +Edit   + +
+
+
+
TCP_IP = (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                 value: 0), (operator: Eq, args: [], value: 6)],
+          value: 0)
+
+ + +Source   +Edit   + +
+
+
+
TcpOnion3 = (operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0),
+                                   (operator: Eq, args: [], value: 445)],
+             value: 0)
+
+ + +Source   +Edit   + +
+
+
+
TLS_WS = (operator: Or, args: [(operator: Eq, args: [], value: 478), (
+    operator: And, args: [(operator: Eq, args: [], value: 448),
+                          (operator: Eq, args: [], value: 477)], value: 0)],
+          value: 0)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderDNS = (stringToBuffer: dnsStB, bufferToString: dnsBtS,
+                 validateBuffer: dnsVB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderIP4 = (stringToBuffer: ip4StB, bufferToString: ip4BtS,
+                 validateBuffer: ip4VB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderIP6 = (stringToBuffer: ip6StB, bufferToString: ip6BtS,
+                 validateBuffer: ip6VB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderIP6Zone = (stringToBuffer: ip6zoneStB, bufferToString: ip6zoneBtS,
+                     validateBuffer: ip6zoneVB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderOnion = (stringToBuffer: onionStB, bufferToString: onionBtS,
+                   validateBuffer: onionVB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderOnion3 = (stringToBuffer: onion3StB, bufferToString: onion3BtS,
+                    validateBuffer: onion3VB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderP2P = (stringToBuffer: p2pStB, bufferToString: p2pBtS,
+                 validateBuffer: p2pVB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderPort = (stringToBuffer: portStB, bufferToString: portBtS,
+                  validateBuffer: portVB)
+
+ + +Source   +Edit   + +
+
+
+
TranscoderUnix = (stringToBuffer: unixStB, bufferToString: unixBtS,
+                  validateBuffer: unixVB)
+
+ + +Source   +Edit   + +
+
+
+
UDP = (operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 273)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
UDP_DNS = (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                                  value: 0),
+                                 (operator: Eq, args: [], value: 273)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
UDP_IP = (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                 value: 0), (operator: Eq, args: [], value: 273)],
+          value: 0)
+
+ + +Source   +Edit   + +
+
+
+
UNIX = (operator: Eq, args: [], value: 400)
+
+ + +Source   +Edit   + +
+
+
+
Unreliable = (operator: Or, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
UTP = (operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 273)], value: 0)], value: 0),
+                             (operator: Eq, args: [], value: 302)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WebRTCDirect = (operator: Or, args: [(operator: And, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0),
+                          (operator: Eq, args: [], value: 480)], value: 0), (
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                           value: 0), (operator: Eq, args: [], value: 480)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 480)],
+                value: 0)], value: 0), (operator: Eq, args: [], value: 276)],
+                                      value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: And, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 6)],
+                value: 0)], value: 0), (operator: Eq, args: [], value: 443)],
+                          value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+    value: 0), (operator: Eq, args: [], value: 443)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 443)], value: 0)], value: 0),
+    (operator: Eq, args: [], value: 276)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WebSockets = (operator: Or, args: [(operator: And, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 6)],
+                value: 0)], value: 0), (operator: Eq, args: [], value: 477)],
+                                    value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WebSockets_DNS = (operator: Or, args: [(operator: And, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0),
+    (operator: Eq, args: [], value: 477)], value: 0), (operator: And, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: Or, args: [(operator: Eq, args: [], value: 478), (
+    operator: And, args: [(operator: Eq, args: [], value: 448),
+                          (operator: Eq, args: [], value: 477)], value: 0)],
+                value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WebSockets_IP = (operator: Or, args: [(operator: And, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0),
+    (operator: Eq, args: [], value: 477)], value: 0), (operator: And, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: Or, args: [(operator: Eq, args: [], value: 478), (
+    operator: And, args: [(operator: Eq, args: [], value: 448),
+                          (operator: Eq, args: [], value: 477)], value: 0)],
+                value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WS = (operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0),
+                            (operator: Eq, args: [], value: 477)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WS_DNS = (operator: And, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0),
+                                (operator: Eq, args: [], value: 477)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WS_IP = (operator: And, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0),
+                               (operator: Eq, args: [], value: 477)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WSS = (operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WSS_DNS = (operator: And, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+
+
WSS_IP = (operator: And, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(pat: MaPattern): string {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Return pattern pat as string. +Source   +Edit   + +
+
+
+
proc `$`(value: MultiAddress): string {....raises: [], public, ...tags: [RootEffect],
+                                        forbids: [].}
+
+ +Return string representation of MultiAddress value. +Source   +Edit   + +
+
+ +
+
+
+
proc `&`(m1, m2: MultiAddress): MultiAddress {....raises: [LPError], raises: [],
+    public, ...tags: [RootEffect], forbids: [].}
+
+ +

Concatenates two addresses m1 and m2, and returns result.

+

This procedure performs validation of concatenated result and can raise exception on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc `&=`(m1: var MultiAddress; m2: MultiAddress) {....raises: [LPError],
+    raises: [], public, ...tags: [RootEffect], forbids: [].}
+
+ +

Concatenates two addresses m1 and m2.

+

This procedure performs validation of concatenated result and can raise exception on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(m1: var MultiAddress; m2: MultiAddress): bool {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +Check of two MultiAddress are equal +Source   +Edit   + +
+
+ +
+
+
+
proc `[]`(ma: MultiAddress; codec: MultiCodec): MaResult[MultiAddress] {.inline,
+    ...raises: [], public, ...tags: [], forbids: [].}
+
+ +Returns partial MultiAddress with MultiCodec codec and present in MultiAddress ma. +Source   +Edit   + +
+
+
+
proc `[]`(ma: MultiAddress; i: int | BackwardsIndex): MaResult[MultiAddress] {.
+    inline, ...raises: [], public.}
+
+ +Returns part with index i of MultiAddress ma. +Source   +Edit   + +
+
+
+
proc `[]`(ma: MultiAddress; slice: HSlice): MaResult[MultiAddress] {.inline,
+    ...raises: [], public.}
+
+ +Returns parts with slice slice of MultiAddress ma. +Source   +Edit   + +
+
+ +
+
+
+
proc append(m1: var MultiAddress; m2: MultiAddress): MaResult[void] {.
+    ...raises: [], public, ...tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc bytes(value: MultiAddress): seq[byte] {....raises: [], public, ...tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc concat(m1, m2: MultiAddress): MaResult[MultiAddress] {....raises: [], public,
+    ...tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc contains(ma: MultiAddress; codec: MultiCodec): MaResult[bool] {.inline,
+    ...raises: [], public, ...tags: [], forbids: [].}
+
+ +Returns true, if address with MultiCodec codec present in MultiAddress ma. +Source   +Edit   + +
+
+ +
+
+
+
proc data(ma: MultiAddress): VBuffer {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Returns the data buffer of the MultiAddress. +Source   +Edit   + +
+
+ +
+
+
+
proc encode(mbtype: typedesc[MultiBase]; encoding: string; ma: MultiAddress): string {.
+    inline, ...raises: [], public.}
+
+ +Get MultiBase encoded representation of ma using encoding encoding. +Source   +Edit   + +
+
+ +
+
+
+
proc getField(pb: ProtoBuffer; field: int; value: var MultiAddress): ProtoResult[
+    bool] {.inline, ...raises: [], public, ...tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc getRepeatedField(pb: ProtoBuffer; field: int; value: var seq[MultiAddress]): ProtoResult[
+    bool] {.inline, ...raises: [], public,
+            ...tags: [RootEffect, TimeEffect, WriteIOEffect], forbids: [].}
+
+ +Read repeated field from protobuf message. field is field number. If the message is malformed, an error is returned. If field is not present in message, then ok(false) is returned and value is empty. If field is present, but no items could be parsed, then err(ProtoError.IncorrectBlob) is returned and value is empty. If field is present and some item could be parsed, then true is returned and value contains the parsed values. +Source   +Edit   + +
+
+ +
+
+
+
proc hash(a: MultiAddress): Hash {....raises: [], public, ...tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc hex(value: MultiAddress): string {....raises: [], public, ...tags: [],
+                                        forbids: [].}
+
+ +Return hexadecimal string representation of MultiAddress value. +Source   +Edit   + +
+
+ +
+
+
+
proc init(mtype: typedesc[MultiAddress]): MultiAddress {....raises: [], public.}
+
+ +Initialize empty MultiAddress. +Source   +Edit   + +
+
+
+
proc init(mtype: typedesc[MultiAddress]; address: TransportAddress;
+          protocol = IPPROTO_TCP): MaResult[MultiAddress] {....raises: [], public.}
+
+ +Initialize MultiAddress using chronos.TransportAddress (IPv4/IPv6/Unix) and protocol information (UDP/TCP). +Source   +Edit   + +
+
+
+
proc init(mtype: typedesc[MultiAddress]; address: ValidIpAddress;
+          protocol: IpTransportProtocol; port: Port): MultiAddress {....raises: [],
+    public.}
+
+ + +Source   +Edit   + +
+
+
+
proc init(mtype: typedesc[MultiAddress]; data: openArray[byte]): MaResult[
+    MultiAddress] {....raises: [], public.}
+
+ +Initialize MultiAddress with array of bytes data. +Source   +Edit   + +
+
+
+
proc init(mtype: typedesc[MultiAddress]; protocol: MultiCodec;
+          value: openArray[byte] = []): MaResult[MultiAddress] {....raises: [],
+    public.}
+
+ +Initialize MultiAddress object from protocol id protocol and array of bytes value. +Source   +Edit   + +
+
+
+
proc init(mtype: typedesc[MultiAddress]; protocol: MultiCodec; value: int): MaResult[
+    MultiAddress] {....raises: [], public.}
+
+ +Initialize MultiAddress object from protocol id protocol and integer value. This procedure can be used to instantiate tcp, udp, dccp and sctp MultiAddresses. +Source   +Edit   + +
+
+
+
proc init(mtype: typedesc[MultiAddress]; protocol: MultiCodec; value: PeerId): MaResult[
+    MultiAddress] {.inline, ...raises: [], public.}
+
+ +Initialize MultiAddress object from protocol id protocol and peer id value. +Source   +Edit   + +
+
+
+
proc init(mtype: typedesc[MultiAddress]; value: string): MaResult[MultiAddress] {.
+    ...raises: [], public.}
+
+ +Initialize MultiAddress object from string representation value. +Source   +Edit   + +
+
+ +
+
+
+
proc isEmpty(ma: MultiAddress): bool {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Returns true, if MultiAddress ma is empty or non initialized. +Source   +Edit   + +
+
+ +
+
+
+
proc len(ma: MultiAddress): MaResult[int] {....raises: [], public, ...tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc mapAnd(args: varargs[MaPattern]): MaPattern {....raises: [], public, ...tags: [],
+    forbids: [].}
+
+ +And operator for pattern +Source   +Edit   + +
+
+ +
+
+
+
proc mapEq(codec: string): MaPattern {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Equal operator for pattern +Source   +Edit   + +
+
+ +
+
+
+
proc mapOr(args: varargs[MaPattern]): MaPattern {....raises: [], public, ...tags: [],
+    forbids: [].}
+
+ +Or operator for pattern +Source   +Edit   + +
+
+ +
+
+
+
proc match(pat: MaPattern; address: MultiAddress): bool {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +Match full address using pattern pat and return true if address satisfies pattern. +Source   +Edit   + +
+
+ +
+
+
+
proc matchPartial(pat: MaPattern; address: MultiAddress): bool {....raises: [],
+    public, ...tags: [], forbids: [].}
+
+ +Match prefix part of address using pattern pat and return true if address starts with pattern. +Source   +Edit   + +
+
+ +
+
+
+
proc protoAddress(ma: MultiAddress): MaResult[seq[byte]] {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +

Returns MultiAddress ma protocol address binary blob.

+

If current MultiAddress do not have argument value, then result array will be empty.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc protoArgument(ma: MultiAddress): MaResult[seq[byte]] {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +

Returns MultiAddress ma protocol address binary blob.

+

If current MultiAddress do not have argument value, then result array will be empty.

+ +Source   +Edit   + +
+
+
+
proc protoArgument(ma: MultiAddress; value: var openArray[byte]): MaResult[int] {.
+    ...raises: [], public, ...tags: [], forbids: [].}
+
+ +

Returns MultiAddress ma protocol argument value.

+

If current MultiAddress do not have argument value, then result will be 0.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc protoCode(ma: MultiAddress): MaResult[MultiCodec] {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +Returns MultiAddress ma protocol code. +Source   +Edit   + +
+
+ +
+
+
+
proc protocols(value: MultiAddress): MaResult[seq[MultiCodec]] {....raises: [],
+    public, ...tags: [], forbids: [].}
+
+ +Returns list of protocol codecs inside of MultiAddress value. +Source   +Edit   + +
+
+ +
+
+
+
proc protoName(ma: MultiAddress): MaResult[string] {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +Returns MultiAddress ma protocol name. +Source   +Edit   + +
+
+ +
+
+
+
proc toString(value: MultiAddress): MaResult[string] {....raises: [], public,
+    ...tags: [RootEffect], forbids: [].}
+
+ +Return string representation of MultiAddress value. +Source   +Edit   + +
+
+ +
+
+
+
proc validate(ma: MultiAddress): bool {....raises: [], public, ...tags: [RootEffect],
+                                        forbids: [].}
+
+ +Returns true if MultiAddress ma is valid. +Source   +Edit   + +
+
+ +
+
+
+
proc write(pb: var ProtoBuffer; field: int; value: MultiAddress) {.inline,
+    ...raises: [], public, ...tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc write(vb: var VBuffer; ma: MultiAddress) {.inline, ...raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +Write MultiAddress value ma to buffer vb. +Source   +Edit   + +
+
+ +
+ +
+
+
+

Iterators

+
+
+
+
iterator items(ma: MultiAddress): MaResult[MultiAddress] {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +Iterates over all addresses inside of MultiAddress ma. +Source   +Edit   + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/multibase.html b/traffic-score-tests/libp2p/multibase.html new file mode 100644 index 000000000..eee6f6fa8 --- /dev/null +++ b/traffic-score-tests/libp2p/multibase.html @@ -0,0 +1,348 @@ + + + + + + + +libp2p/multibase + + + + + + + + + + + + +
+
+

libp2p/multibase

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements MultiBase.

+

TODO:

+
  1. base32z
  2. +
+

+
+

Types

+
+
+
MultiBase = object
+
+ + +Source   +Edit   + +
+
+
+
MultiBaseStatus {.pure.} = enum
+  Error, Success, Overrun, Incorrect, BadCodec, NotSupported
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc decode(mbtype: typedesc[MultiBase]; inbytes: openArray[char]): Result[
+    seq[byte], string] {....raises: [].}
+
+ +Decode MultiBase encoded array inbytes and return decoded sequence of bytes. +Source   +Edit   + +
+
+
+
proc decode(mbtype: typedesc[MultiBase]; inbytes: openArray[char];
+            outbytes: var openArray[byte]; outlen: var int): MultiBaseStatus {.
+    ...raises: [].}
+
+ +

Decode array inbytes using MultiBase encoding and store decoded value to outbytes.

+

If inbytes is not correct MultiBase string, then MultiBaseStatus.BadCodec if first character is wrong, or MultiBaseStatus.Incorrect if string has incorrect characters for such encoding.

+

If length of outbytes is not enough to store decoded result, then MultiBaseStatus.Overrun error will be returned and outlen will be set to length required.

+

On successfull decoding MultiBaseStatus.Success will be returned and outlen will be set to number of encoded octets (bytes).

+ +Source   +Edit   + +
+
+ +
+
+
+
proc decodedLength(mbtype: typedesc[MultiBase]; encoding: char; length: int): int {.
+    ...raises: [].}
+
+ +Return estimated size of buffer to store MultiBase decoded value with encoding character encoding of length length. +Source   +Edit   + +
+
+ +
+
+
+
proc encode(mbtype: typedesc[MultiBase]; encoding: string;
+            inbytes: openArray[byte]): Result[string, string] {....raises: [].}
+
+ +Encode array inbytes using MultiBase encoding scheme encoding and return encoded string. +Source   +Edit   + +
+
+
+
proc encode(mbtype: typedesc[MultiBase]; encoding: string;
+            inbytes: openArray[byte]; outbytes: var openArray[char];
+            outlen: var int): MultiBaseStatus {....raises: [].}
+
+ +

Encode array inbytes using MultiBase encoding scheme encoding and store encoded value to outbytes.

+

If encoding is not supported MultiBaseStatus.NotSupported will be returned.

+

If encoding is not correct string, then MultBaseStatus.BadCodec will be returned.

+

If length of outbytes is not enough to store encoded result, then MultiBaseStatus.Overrun error will be returned and outlen will be set to length required.

+

On successfull encoding MultiBaseStatus.Success will be returned and outlen will be set to number of encoded octets (bytes).

+ +Source   +Edit   + +
+
+ +
+
+
+
proc encodedLength(mbtype: typedesc[MultiBase]; encoding: string; length: int): int {.
+    ...raises: [].}
+
+ +

Return estimated size of buffer to store MultiBase encoded value with encoding encoding of length length.

+

Procedure returns -1 if encoding scheme is not supported or not present.

+ +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/multicodec.html b/traffic-score-tests/libp2p/multicodec.html new file mode 100644 index 000000000..910b14cc5 --- /dev/null +++ b/traffic-score-tests/libp2p/multicodec.html @@ -0,0 +1,430 @@ + + + + + + + +libp2p/multicodec + + + + + + + + + + + + +
+
+

libp2p/multicodec

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements MultiCodec.List of officially supported codecs can BE found here https://github.com/multiformats/multicodec/blob/master/table.csv

+
+

Imports

+
+ varint, vbuffer +
+
+
+

Types

+
+
+
MultiCodec = distinct int
+
+ + +Source   +Edit   + +
+
+
+
MultiCodecError = enum
+  MultiCodecNotSupported
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
InvalidMultiCodec = -1
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `!=`(a, b: MultiCodec): bool {....raises: [], tags: [], forbids: [].}
+
+ +Returns true if MultiCodecs a and b are not equal. +Source   +Edit   + +
+
+ +
+
+
+
proc `$`(mc: MultiCodec): string {....raises: [], tags: [], forbids: [].}
+
+ +Returns string representation of MultiCodec mc. +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(a, b: MultiCodec): bool {....raises: [], tags: [], forbids: [].}
+
+ +Returns true if MultiCodecs a and b are equal. +Source   +Edit   + +
+
+
+
proc `==`(mc: MultiCodec; code: int): bool {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Compares MultiCodec mc with integer code. +Source   +Edit   + +
+
+
+
proc `==`(mc: MultiCodec; name: string): bool {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Compares MultiCodec mc with string name. +Source   +Edit   + +
+
+ +
+
+
+
proc codec(mt: typedesc[MultiCodec]; code: int): MultiCodec {.inline, ...raises: [].}
+
+ +Return MultiCodec from integer representation code. If code is not valid multicodec code, then InvalidMultiCodec will be returned. +Source   +Edit   + +
+
+
+
proc codec(mt: typedesc[MultiCodec]; name: string): MultiCodec {.inline,
+    ...raises: [].}
+
+ +Return MultiCodec from string representation name. If name is not valid multicodec name, then InvalidMultiCodec will be returned. +Source   +Edit   + +
+
+ +
+
+
+
proc hash(m: MultiCodec): Hash {.inline, ...raises: [], tags: [], forbids: [].}
+
+ +Hash procedure for tables. +Source   +Edit   + +
+
+ +
+
+
+
proc multiCodec(code: int): MultiCodec {.compileTime, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Generate MultiCodec from integer code at compile time. +Source   +Edit   + +
+
+
+
proc multiCodec(name: string): MultiCodec {.compileTime, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Generate MultiCodec from string name at compile time. +Source   +Edit   + +
+
+ +
+
+
+
proc write(vb: var VBuffer; mc: MultiCodec) {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Write MultiCodec to buffer vb. +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/multihash.html b/traffic-score-tests/libp2p/multihash.html new file mode 100644 index 000000000..f57428918 --- /dev/null +++ b/traffic-score-tests/libp2p/multihash.html @@ -0,0 +1,616 @@ + + + + + + + +libp2p/multihash + + + + + + + + + + + + +
+
+

libp2p/multihash

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements MultiHash. Supported hashes are:

  1. IDENTITY
  2. +
  3. SHA2-256/SHA2-512
  4. +
  5. DBL-SHA2-256
  6. +
  7. SHA3/KECCAK
  8. +
  9. SHAKE-128/SHAKE-256
  10. +
  11. BLAKE2s/BLAKE2s
  12. +
  13. SHA1
  14. +
+

Hashes which are not yet supported

+
  1. SKEIN
  2. +
  3. MURMUR
  4. +
+

+ +
+

Types

+
+
+
MHash = object
+  mcodec*: MultiCodec
+  size*: int
+  coder*: MHashCoderProc
+
+
+ + +Source   +Edit   + +
+
+
+
MHashCoderProc = proc (data: openArray[byte]; output: var openArray[byte]) {.
+    nimcall, ...gcsafe, noSideEffect, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
MhResult[T] = Result[T, cstring]
+
+ + +Source   +Edit   + +
+
+
+
MultiHash = object
+  data*: VBuffer
+  mcodec*: MultiCodec
+  size*: int
+  dpos*: int
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
MaxHashSize = 128
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(mh: MultiHash): string {....raises: [], tags: [], forbids: [].}
+
+ +Return string representation of MultiHash value. +Source   +Edit   + +
+
+ +
+
+
+
proc `==`(a: MultiHash; b: MultiHash): bool {....raises: [], tags: [], forbids: [].}
+
+ +Compares MultiHashes a and b, returns true if hashes are equal, false otherwise. +Source   +Edit   + +
+
+
+
proc `==`[T](mdigest: MDigest[T]; mh: MultiHash): bool {.inline, ...raises: [].}
+
+ +Compares MultiHash with nimcrypto's MDigestT, returns true if hashes are equal, false otherwise. +Source   +Edit   + +
+
+
+
proc `==`[T](mh: MultiHash; mdigest: MDigest[T]): bool {....raises: [].}
+
+ +Compares MultiHash with nimcrypto's MDigestT, returns true if hashes are equal, false otherwise. +Source   +Edit   + +
+
+ +
+
+
+
proc base58(value: MultiHash): string {....raises: [], tags: [], forbids: [].}
+
+ +Return Base58 encoded string representation of MultiHash value. +Source   +Edit   + +
+
+ +
+
+
+
proc decode(mhtype: typedesc[MultiHash]; data: openArray[byte];
+            mhash: var MultiHash): MhResult[int] {....raises: [].}
+
+ +

Decode MultiHash value from array of bytes data.

+

On success decoded MultiHash will be stored into mhash and number of bytes consumed will be returned.

+

On error -1 will be returned.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc digest(mhtype: typedesc[MultiHash]; hashcode: int; data: openArray[byte]): MhResult[
+    MultiHash] {.inline, ...raises: [].}
+
+ +Perform digest calculation using hash algorithm with code hashcode on data array data. +Source   +Edit   + +
+
+
+
proc digest(mhtype: typedesc[MultiHash]; hashname: string; data: openArray[byte]): MhResult[
+    MultiHash] {.inline, ...raises: [].}
+
+ +Perform digest calculation using hash algorithm with name hashname on data array data. +Source   +Edit   + +
+
+ +
+
+
+
proc encode(mbtype: typedesc[MultiBase]; encoding: string; mh: MultiHash): string {.
+    inline, ...raises: [].}
+
+ +Get MultiBase encoded representation of mh using encoding encoding. +Source   +Edit   + +
+
+ +
+
+
+
proc hex(value: MultiHash): string {....raises: [], tags: [], forbids: [].}
+
+ +Return hexadecimal string representation of MultiHash value. +Source   +Edit   + +
+
+ +
+
+
+
proc init(mhtype: typedesc[MultiHash]; data: openArray[byte]): MhResult[
+    MultiHash] {.inline, ...raises: [].}
+
+ +Create MultiHash from bytes array data. +Source   +Edit   + +
+
+
+
proc init(mhtype: typedesc[MultiHash]; data: string): MhResult[MultiHash] {.
+    inline, ...raises: [].}
+
+ +Create MultiHash from hexadecimal string representation data. +Source   +Edit   + +
+
+
+
proc init(mhtype: typedesc[MultiHash]; hashcode: MultiCodec;
+          bdigest: openArray[byte]): MhResult[MultiHash] {.inline, ...raises: [].}
+
+ +Create MultiHash from array of bytes bdigest and hash algorithm code hashcode. +Source   +Edit   + +
+
+
+
proc init(mhtype: typedesc[MultiHash]; hashname: string;
+          bdigest: openArray[byte]): MhResult[MultiHash] {.inline, ...raises: [].}
+
+ +Create MultiHash from array of bytes bdigest and hash algorithm code hashcode. +Source   +Edit   + +
+
+
+
proc init[T](mhtype: typedesc[MultiHash]; hashcode: MultiCodec;
+             mdigest: MDigest[T]): MhResult[MultiHash] {.inline, ...raises: [].}
+
+ +Create MultiHash from nimcrypto's MDigest and hash algorithm code hashcode. +Source   +Edit   + +
+
+
+
proc init[T](mhtype: typedesc[MultiHash]; hashname: string; mdigest: MDigest[T]): MhResult[
+    MultiHash] {.inline, ...raises: [].}
+
+ +Create MultiHash from nimcrypto's MDigest object and hash algorithm name hashname. +Source   +Edit   + +
+
+ +
+
+
+
proc init58(mhtype: typedesc[MultiHash]; data: string): MultiHash {.inline,
+    ...raises: [].}
+
+ +Create MultiHash from BASE58 encoded string representation data. +Source   +Edit   + +
+
+ +
+
+
+
proc validate(mhtype: typedesc[MultiHash]; data: openArray[byte]): bool {.
+    ...raises: [].}
+
+ +Returns true if array of bytes data has correct MultiHash inside. +Source   +Edit   + +
+
+ +
+
+
+
proc write(vb: var VBuffer; mh: MultiHash) {.inline, ...raises: [], tags: [],
+    forbids: [].}
+
+ +Write MultiHash value mh to buffer vb. +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/multistream.html b/traffic-score-tests/libp2p/multistream.html new file mode 100644 index 000000000..f85301b9f --- /dev/null +++ b/traffic-score-tests/libp2p/multistream.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/multistream + + + + + + + + + + + + +
+
+

libp2p/multistream

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/muxers/mplex/coder.html b/traffic-score-tests/libp2p/muxers/mplex/coder.html new file mode 100644 index 000000000..ba8320bbd --- /dev/null +++ b/traffic-score-tests/libp2p/muxers/mplex/coder.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/muxers/mplex/coder + + + + + + + + + + + + +
+
+

libp2p/muxers/mplex/coder

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/muxers/mplex/lpchannel.html b/traffic-score-tests/libp2p/muxers/mplex/lpchannel.html new file mode 100644 index 000000000..b8b79e7cd --- /dev/null +++ b/traffic-score-tests/libp2p/muxers/mplex/lpchannel.html @@ -0,0 +1,513 @@ + + + + + + + +libp2p/muxers/mplex/lpchannel + + + + + + + + + + + + +
+
+

libp2p/muxers/mplex/lpchannel

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

Channel half-closed states
+
+| State    | Closed local      | Closed remote
+|=============================================
+| Read     | Yes (until EOF)   | No
+| Write    | No                | Yes
+
+Channels are considered fully closed when both outgoing and incoming
+directions are closed and when the reader of the channel has read the
+EOF marker
+

+ +
+

Types

+
+
+
LPChannel = ref object of BufferStream
+  id*: uint64
+  name*: string
+  conn*: Connection
+  initiator*: bool
+  isOpen*: bool
+  closedLocal*: bool
+  remoteReset*: bool
+  localReset*: bool
+  msgCode*: MessageType
+  closeCode*: MessageType
+  resetCode*: MessageType
+  writes*: int
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
LPChannelTrackerName = "LPChannel"
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc init(L: type LPChannel; id: uint64; conn: Connection; initiator: bool;
+          name: string = ""; timeout: Duration = DefaultChanTimeout): LPChannel {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc open(s: LPChannel) {.async, ...gcsafe, raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc reset(s: LPChannel) {.async, ...gcsafe, raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(s: LPChannel): auto {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method close(s: LPChannel) {.async, ...gcsafe, raises: [], tags: [], forbids: [].}
+
+ +Close channel for writing - a message will be sent to the other peer informing them that the channel is closed and that we're waiting for their acknowledgement. +Source   +Edit   + +
+
+ +
+
+
+
method closed(s: LPChannel): bool {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method getWrapped(s: LPChannel): Connection {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method initStream(s: LPChannel) {....raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method readOnce(s: LPChannel; pbytes: pointer; nbytes: int): Future[int] {.
+    async, ...raises: [], tags: [RootEffect], forbids: [].}
+
+ +Mplex relies on reading being done regularly from every channel, or all channels are blocked - in particular, this means that reading from one channel must not be done from within a callback / read handler of another or the reads will lock each other. +Source   +Edit   + +
+
+ +
+
+
+
method write(s: LPChannel; msg: seq[byte]): Future[void] {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ +Write to mplex channel - there may be up to MaxWrite concurrent writes pending after which the peer is disconnected +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template formatItIMPL(it: LPChannel): auto
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ newLPStreamWriteError, DNS_OR_IP, ProtoHeader, shortLog, init, random, UDP_DNS, $, getProtoHeader, MaError, ephemeral, MaPatternOp, WS_DNS, initVBuffer, getProtoHeader, MaxSizeError, ProtoFlags, getLen, ECDHEScheme, shortLog, init, init, closed, [], decode, macOpenArray, random, init, VBuffer, Secret, peekVarint, random, $, validate, mapOr, init, bytes, maxInlineKeyLength, TranscoderDNS, QUIC, [], key, ephemeral, withValue, getRequiredField, getField, init, writeLp, WS_IP, write, public, MAKind, write, DNSANY, getField, checkFieldNumber, valueOr, init, getRepeatedField, matchPartial, libp2p_pki_schemes, getBytes, len, ==, readVarint, readLp, HTTP, initVBuffer, mac, atEof, TcpOnion3, write, toOpt, fullAddrs, payloadType, <=, LPStreamError, init, IP, protoAddress, newRng, DefaultConnectionTimeout, ==, checkValid, getPublicKey, exceptionToAssert, decodeProposal, len, CircuitRelay, extractPublicKey, mapAnd, new, verify, UDP_IP, new, newLPStreamEOFError, init, ==, DNSADDR, AddressMapper, write, PeerId, WSS, LPStream, TCP_IP, hash, writePacked, init, readSeq, toBytes, TCP_DNS, shortLog, encode, len, capLen, init, protoName, toRawBytes, TranscoderIP6Zone, $, initProtoBuffer, newLPStreamReadError, init, WSS_DNS, match, writeLPVarint, CryptoResult, parseFullAddress, ProtoResult, WebRTCDirect, init, UDP, TranscoderOnion, StreamTracker, write, init, LPStreamResetError, isEmpty, writeArray, LPStreamReadError, decode, LPStreamIncompleteError, [], LPStreamEOFError, IP6, shortLog, initVBuffer, PKScheme, payload, init, init, Connection, write, init, TCP, PrivateKey, getBytes, newLPStreamIncorrectDefect, init, &=, PeerInfoError, newLPStreamClosedError, random, write, compilesOr, TranscoderIP4, init, initProtoBuffer, toException, DNS, UTP, goffset, readVarint, getRawBytes, >, KeyPair, init, init, high, toString, cmp, init, SupportedWireTypes, formatItIMPL, formatItIMPL, formatItIMPL, Signature, contains, hash, formatItIMPL, toBytes, DigestSheme, IPFS, getField, readOnce, init, isEmpty, ProtoScalar, shortLog, data, LPStreamIncorrectDefect, hex, protocols, finish, update, HTTPS, tryAndWarn, WebSockets, LPError, getPtr, write, TLS_WS, sign, finish, encode, MaResult, init, ProtoField, init, toBytes, writeSeq, init, &, DNS6, IpTransportProtocol, toOpenArray, allFuturesThrowing, IP4, TranscoderPort, isEnough, safeConvert, getField, init, createExchange, >=, init, payloadDomain, $, MaPattern, withValue, init, LPStreamLimitError, TranscoderOnion3, SignedPayload, closeImpl, toBytes, protoArgument, newLPStreamLimitError, write, keyOpenArray, match, createProposal, parseFullAddress, $, isEmpty, supported, getRequiredRepeatedField, init, newLPStreamIncompleteError, newLPStreamReadError, initProtoBuffer, MAProtocol, newLPStreamResetError, getPackedRepeatedField, initStream, getField, shortLog, DNS4, getWrapped, readArray, selectBest, write, P2PPattern, Envelope, hasPublicKey, toException, init, isEnough, init, Reliable, addrs, hex, ProtoBuffer, getBytes, WS, stretchKeys, encode, init, init, getField, getField, match, getField, <, iv, readLine, Eof, CryptoError, hash, append, vsizeof, init, WebSockets_DNS, WSS_IP, LPStreamConnDownError, peekArray, UNIX, PeerRecord, SupportedSchemes, getRepeatedField, LPStreamWriteError, Unreliable, SupportedSchemesInt, random, checkFutures, shuffle, validate, $, protoCode, mapEq, Onion3, write, LPStreamTrackerName, concat, TranscoderP2P, PeerInfo, AddressInfo, ConnectionTrackerName, TranscoderIP6, write, EnvelopeError, encode, newLPStreamRemoteClosedError, MaPatResult, Direction, InvalidVarintError, decode, shortLog, items, ==, init, peekSeq, getBytes, write, PublicKey, WebSockets_IP, writeLp, writePBVarint, ProtoFieldKind, readExactly, protoArgument, getRepeatedField, ProtoError, newLPStreamConnDownError, initStream, getField, MultiAddress, ivOpenArray, TimeoutHandler, orError, decodeExchange, getField, LPStreamRemoteClosedError, setupStreamTracker, MaInvalidAddress, LPStreamClosedError, RsaDefaultKeySize, write, getOrder, TranscoderUnix, SignedPeerRecord, join, writeVarint +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/muxers/muxer.html b/traffic-score-tests/libp2p/muxers/muxer.html new file mode 100644 index 000000000..f4d14f8c3 --- /dev/null +++ b/traffic-score-tests/libp2p/muxers/muxer.html @@ -0,0 +1,477 @@ + + + + + + + +libp2p/muxers/muxer + + + + + + + + + + + + +
+
+

libp2p/muxers/muxer

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
Muxer = ref object of RootObj
+  streamHandler*: StreamHandler
+  handler*: Future[void]
+  connection*: Connection
+
+
+ + +Source   +Edit   + +
+
+
+
MuxerConstructor = proc (conn: Connection): Muxer {....gcsafe, closure, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
MuxerError = object of LPError
+
+ + +Source   +Edit   + +
+
+
+
MuxerHandler = proc (muxer: Muxer): Future[void] {....gcsafe, raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
MuxerProvider = object
+  newMuxer*: MuxerConstructor
+  codec*: string
+
+
+ + +Source   +Edit   + +
+
+
+
StreamHandler = proc (conn: Connection): Future[void] {....gcsafe, raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
TooManyChannels = object of MuxerError
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
DefaultChanTimeout = (value: 300000000000)
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc new(T: typedesc[MuxerProvider]; creator: MuxerConstructor; codec: string): T:type {.
+    ...gcsafe, raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(m: Muxer): auto {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method close(m: Muxer) {.base, async, ...gcsafe, raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method getStreams(m: Muxer): seq[Connection] {.base, ...raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method handle(m: Muxer): Future[void] {.base, async, ...gcsafe, raises: [],
+                                        tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method newStream(m: Muxer; name: string = ""; lazy: bool = false): Future[
+    Connection] {.base, async, ...gcsafe, raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template formatItIMPL(it: Muxer): auto
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/nameresolving/nameresolver.html b/traffic-score-tests/libp2p/nameresolving/nameresolver.html new file mode 100644 index 000000000..db7c9e432 --- /dev/null +++ b/traffic-score-tests/libp2p/nameresolving/nameresolver.html @@ -0,0 +1,336 @@ + + + + + + + +libp2p/nameresolving/nameresolver + + + + + + + + + + + + +
+
+

libp2p/nameresolving/nameresolver

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
NameResolver = ref object of RootObj
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc getHostname(ma: MultiAddress): string {....raises: [], tags: [RootEffect],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc resolveDnsAddr(self: NameResolver; ma: MultiAddress; depth: int = 0): Future[
+    seq[MultiAddress]] {.async, ...raises: [],
+                         tags: [TimeEffect, RootEffect, WriteIOEffect],
+                         forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc resolveMAddress(self: NameResolver; address: MultiAddress): Future[
+    seq[MultiAddress]] {.async, ...raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method resolveIp(self: NameResolver; address: string; port: Port;
+                 domain: Domain = Domain.AF_UNSPEC): Future[
+    seq[TransportAddress]] {.async, base, ...raises: [], tags: [], forbids: [].}
+
+ +Resolve the specified address +Source   +Edit   + +
+
+ +
+
+
+
method resolveTxt(self: NameResolver; address: string): Future[seq[string]] {.
+    async, base, ...raises: [], tags: [], forbids: [].}
+
+ +Get TXT record +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/observedaddrmanager.html b/traffic-score-tests/libp2p/observedaddrmanager.html new file mode 100644 index 000000000..7f15b258e --- /dev/null +++ b/traffic-score-tests/libp2p/observedaddrmanager.html @@ -0,0 +1,314 @@ + + + + + + + +libp2p/observedaddrmanager + + + + + + + + + + + + +
+
+

libp2p/observedaddrmanager

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
ObservedAddrManager = ref object of RootObj
+  
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(self: ObservedAddrManager): string {....raises: [], tags: [RootEffect],
+    forbids: [].}
+
+ +Returns a string representation of the ObservedAddrManager. +Source   +Edit   + +
+
+ +
+
+
+
proc addObservation(self: ObservedAddrManager; observedAddr: MultiAddress): bool {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Adds a new observed MultiAddress. If the number of observations exceeds maxSize, the oldest one is removed. +Source   +Edit   + +
+
+ +
+
+
+
proc getMostObservedProtosAndPorts(self: ObservedAddrManager): seq[MultiAddress] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ +Returns the most observed IP4/Port and IP6/Port address or an empty seq if the number of observations are less than minCount. +Source   +Edit   + +
+
+ +
+
+
+
proc guessDialableAddr(self: ObservedAddrManager; ma: MultiAddress): MultiAddress {.
+    ...raises: [], tags: [RootEffect], forbids: [].}
+
+ +Replaces the first proto value of each listen address by the corresponding (matching the proto code) most observed value. If the most observed value is not available, the original MultiAddress is returned. +Source   +Edit   + +
+
+ +
+
+
+
proc new(T: typedesc[ObservedAddrManager]; maxSize = 10; minCount = 3): T:type {.
+    ...raises: [].}
+
+ +Creates a new ObservedAddrManager. +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/peerid.html b/traffic-score-tests/libp2p/peerid.html new file mode 100644 index 000000000..1d884f76b --- /dev/null +++ b/traffic-score-tests/libp2p/peerid.html @@ -0,0 +1,748 @@ + + + + + + + +libp2p/peerid + + + + + + + + + + + + +
+
+

libp2p/peerid

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implementes API for libp2p peer.Serialization/Deserialization helpers

+ +
+

Types

+
+
+
PeerId = object
+  data*: seq[byte]
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
maxInlineKeyLength = 42
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
func `$`(pid: PeerId): string {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Return base58 encoded pid representation. +Source   +Edit   + +
+
+ +
+
+
+
func cmp(a, b: PeerId): int {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Compares two peer ids a and b. Returns:

0 iff a == b
< 0 iff a < b

0 iff a > b

+

+Source   +Edit   + +
+
+ +
+
+
+
func extractPublicKey(pid: PeerId; pubkey: var PublicKey): bool {....raises: [],
+    public, ...tags: [RootEffect], forbids: [].}
+
+ +

Returns true if public key was successfully decoded from PeerId pidand stored to pubkey.

+

Returns false otherwise.

+ +Source   +Edit   + +
+
+ +
+
+
+
func getField(pb: ProtoBuffer; field: int; pid: var PeerId): ProtoResult[bool] {.
+    inline, ...raises: [], public, ...tags: [], forbids: [].}
+
+ +Read PeerId from ProtoBuf's message and validate it +Source   +Edit   + +
+
+ +
+
+
+
func hasPublicKey(pid: PeerId): bool {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Returns true if pid is small enough to hold public key inside. +Source   +Edit   + +
+
+ +
+
+
+
func hex(pid: PeerId): string {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Returns hexadecimal string representation of pid. +Source   +Edit   + +
+
+ +
+
+
+
func init(pid: var PeerId; data: openArray[byte]): bool {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +

Initialize peer id from raw binary representation data.

+

Returns true if peer was successfully initialiazed.

+ +Source   +Edit   + +
+
+
+
func init(pid: var PeerId; data: string): bool {....raises: [], public, ...tags: [],
+    forbids: [].}
+
+ +

Initialize peer id from base58 encoded string representation.

+

Returns true if peer was successfully initialiazed.

+ +Source   +Edit   + +
+
+
+
func init(t: typedesc[PeerId]; data: openArray[byte]): Result[PeerId, cstring] {.
+    ...raises: [], public.}
+
+ +Create new peer id from raw binary representation data. +Source   +Edit   + +
+
+
+
func init(t: typedesc[PeerId]; data: string): Result[PeerId, cstring] {.
+    ...raises: [], public.}
+
+ +Create new peer id from base58 encoded string representation data. +Source   +Edit   + +
+
+
+
func init(t: typedesc[PeerId]; pubkey: PublicKey): Result[PeerId, cstring] {.
+    ...raises: [], public.}
+
+ +Create new peer id from public key pubkey. +Source   +Edit   + +
+
+
+
func init(t: typedesc[PeerId]; seckey: PrivateKey): Result[PeerId, cstring] {.
+    ...raises: [], public.}
+
+ +Create new peer id from private key seckey. +Source   +Edit   + +
+
+ +
+
+
+
func match(pid: PeerId; pubkey: PublicKey): bool {....raises: [], public,
+    ...tags: [RootEffect], forbids: [].}
+
+ +Returns true if pid matches public key pubkey. +Source   +Edit   + +
+
+
+
func match(pid: PeerId; seckey: PrivateKey): bool {....raises: [], public,
+    ...tags: [RootEffect], forbids: [].}
+
+ +Returns true if pid matches private key seckey. +Source   +Edit   + +
+
+ +
+
+
+
proc random(t: typedesc[PeerId]; rng = newRng()): Result[PeerId, cstring] {.
+    ...raises: [], public.}
+
+ +Create new peer id with random public key. +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(pid: PeerId): string {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Returns compact string representation of pid. +Source   +Edit   + +
+
+ +
+
+
+
func toBytes(pid: PeerId; data: var openArray[byte]): int {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +

Store PeerId pid to array of bytes data.

+

Returns number of bytes needed to store pid.

+ +Source   +Edit   + +
+
+ +
+
+
+
func validate(pid: PeerId): bool {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Validate check if pid is empty or not. +Source   +Edit   + +
+
+ +
+
+
+
func write(pb: var ProtoBuffer; field: int; pid: PeerId) {....raises: [], public,
+    ...tags: [], forbids: [].}
+
+ +Write PeerId value peerid to object pb using ProtoBuf's encoding. +Source   +Edit   + +
+
+
+
func write(vb: var VBuffer; pid: PeerId) {....raises: [], public, ...tags: [],
+    forbids: [].}
+
+ +Write PeerId value peerid to buffer vb. +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template `<`(a, b: PeerId): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template `<=`(a, b: PeerId): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template `==`(a, b: PeerId): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template `>`(a, b: PeerId): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template `>=`(a, b: PeerId): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template formatItIMPL(it: PeerId): auto
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template getBytes(pid: PeerId): seq[byte]
+
+ +Return PeerId pid as array of bytes. +Source   +Edit   + +
+
+ +
+
+
+
template hash(pid: PeerId): Hash
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template len(pid: PeerId): int
+
+ +Returns length of pid binary representation. +Source   +Edit   + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/peerinfo.html b/traffic-score-tests/libp2p/peerinfo.html new file mode 100644 index 000000000..392e9ef9e --- /dev/null +++ b/traffic-score-tests/libp2p/peerinfo.html @@ -0,0 +1,436 @@ + + + + + + + +libp2p/peerinfo + + + + + + + + + + + + +
+
+

libp2p/peerinfo

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

Our local peer info

+ +
+

Types

+
+
+
AddressMapper = proc (listenAddrs: seq[MultiAddress]): Future[seq[MultiAddress]] {.
+    ...gcsafe, raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
PeerInfo {.public.} = ref object
+  peerId*: PeerId
+  listenAddrs*: seq[MultiAddress]
+  addressMappers*: seq[AddressMapper]
+  protocols*: seq[string]
+  protoVersion*: string
+  agentVersion*: string
+  privateKey*: PrivateKey
+  publicKey*: PublicKey
+  signedPeerRecord*: SignedPeerRecord
+
+
+ + +Source   +Edit   + +
+
+
+
PeerInfoError = object of LPError
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc addrs(p: PeerInfo): seq[MultiAddress] {....raises: [], public, ...tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc fullAddrs(p: PeerInfo): MaResult[seq[MultiAddress]] {....raises: [], public,
+    ...tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc new(p: typedesc[PeerInfo]; key: PrivateKey;
+         listenAddrs: openArray[MultiAddress] = [];
+         protocols: openArray[string] = []; protoVersion: string = "";
+         agentVersion: string = ""; addressMappers = newSeq[AddressMapper]()): PeerInfo {.
+    ...raises: [LPError], raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc parseFullAddress(ma: MultiAddress): MaResult[(PeerId, MultiAddress)] {.
+    ...raises: [], public, ...tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc parseFullAddress(ma: string | seq[byte]): MaResult[(PeerId, MultiAddress)] {.
+    ...raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(p: PeerInfo): auto {....raises: [], public, ...tags: [RootEffect],
+                                   forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc update(p: PeerInfo) {.async, ...raises: [], public,
+                           ...tags: [RootEffect, TimeEffect, WriteIOEffect],
+                           forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template formatItIMPL(it: PeerInfo): auto
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ formatItIMPL, hash, shortLog, random, $, write, PeerId, ==, getField, <=, capLen, init, validate, init, match, <, getBytes, maxInlineKeyLength, write, withValue, safeConvert, shortLog, >=, withValue, public, shortLog, compilesOr, toBytes, match, valueOr, init, init, init, toOpt, init, hasPublicKey, >, hex, len, exceptionToAssert, cmp, extractPublicKey, DNS_OR_IP, hash, UDP_DNS, MaError, IPFS, MaPatternOp, isEmpty, WS_DNS, initVBuffer, ProtoScalar, getProtoHeader, hex, protocols, bytes, ==, getLen, HTTPS, UNIX, TranscoderIP6, encode, [], MaResult, init, ProtoField, peekVarint, getRequiredRepeatedField, mapOr, writeSeq, WebSockets_IP, &, DNS6, TLS_WS, [], IpTransportProtocol, QUIC, toOpenArray, IP4, TranscoderPort, withValue, safeConvert, getRequiredField, $, WS_IP, withValue, public, MAKind, getField, checkFieldNumber, TranscoderOnion3, getRepeatedField, matchPartial, protoArgument, match, data, WebSockets, $, isEmpty, HTTP, initVBuffer, finish, VBuffer, init, TcpOnion3, initProtoBuffer, MAProtocol, peekSeq, getPackedRepeatedField, toOpt, getProtoHeader, ProtoHeader, IP, getField, protoAddress, DNS4, readArray, getPtr, isEnough, P2PPattern, CircuitRelay, contains, isEnough, Reliable, ProtoBuffer, len, WS, exceptionToAssert, mapAnd, UDP_IP, DNSANY, DNSADDR, append, write, WSS_IP, peekArray, WSS, readSeq, getRepeatedField, TCP_IP, getField, writePacked, Unreliable, TCP_DNS, capLen, init, protoName, protoArgument, validate, mapEq, Onion3, MaPattern, TranscoderIP6Zone, $, initProtoBuffer, concat, TranscoderP2P, WSS_DNS, writeLPVarint, write, ProtoResult, WebRTCDirect, len, UDP, MaPatResult, TranscoderOnion, write, init, shortLog, items, isEmpty, writeArray, write, WebSockets_DNS, init, UTP, [], IP6, shortLog, ProtoFlags, finish, writePBVarint, valueOr, ProtoFieldKind, TCP, TranscoderDNS, getRepeatedField, ProtoError, init, init, getField, MultiAddress, &=, readVarint, compilesOr, vsizeof, getField, TranscoderIP4, init, initVBuffer, protoCode, MaInvalidAddress, initProtoBuffer, DNS, write, TranscoderUnix, high, toString, writeVarint, SupportedWireTypes, Signature, shortLog, toBytes, DigestSheme, ephemeral, decodeProposal, init, getRawBytes, sign, SupportedSchemesInt, macOpenArray, Secret, $, write, init, selectBest, init, ECDHEScheme, ephemeral, withValue, safeConvert, init, createExchange, init, withValue, public, init, getField, valueOr, init, toBytes, random, createProposal, init, getBytes, write, toOpt, init, newRng, toRawBytes, getPublicKey, init, random, init, exceptionToAssert, init, init, init, getField, iv, CryptoError, ==, verify, init, key, SupportedSchemes, RsaDefaultKeySize, toBytes, capLen, shuffle, supported, write, ==, libp2p_pki_schemes, random, getBytes, random, keyOpenArray, CryptoResult, stretchKeys, init, init, shortLog, init, PublicKey, mac, shortLog, PKScheme, init, PrivateKey, getBytes, ivOpenArray, write, compilesOr, orError, decodeExchange, $, write, goffset, getOrder, KeyPair, DNS_OR_IP, shortLog, random, UDP_DNS, $, getProtoHeader, MaError, ephemeral, MaPatternOp, ==, WS_DNS, initVBuffer, <=, decodeProposal, ==, getLen, ECDHEScheme, shortLog, init, finish, [], macOpenArray, random, init, Secret, peekVarint, random, $, validate, mapOr, init, bytes, maxInlineKeyLength, TranscoderDNS, QUIC, init, withValue, getRequiredField, mac, stretchKeys, WS_IP, write, public, MAKind, toRawBytes, write, decode, checkFieldNumber, init, getRepeatedField, matchPartial, init, data, HTTP, initVBuffer, VBuffer, finish, peekSeq, toOpt, payloadType, getProtoHeader, ProtoHeader, init, IP, protoAddress, newRng, ==, checkValid, getPublicKey, CircuitRelay, len, exceptionToAssert, extractPublicKey, mapAnd, UDP_IP, init, ==, DNSADDR, write, WSS, TCP_IP, writePacked, toBytes, TCP_DNS, encode, len, capLen, supported, protoName, write, TranscoderIP6Zone, $, initProtoBuffer, init, ProtoBuffer, WSS_DNS, match, writeLPVarint, CryptoResult, ProtoResult, WebRTCDirect, init, $, UDP, TranscoderOnion, write, init, readVarint, isEmpty, writeArray, PeerId, [], IP6, shortLog, initVBuffer, ProtoFlags, PKScheme, init, payload, init, init, write, DNSANY, valueOr, TCP, PrivateKey, getBytes, write, &=, random, compilesOr, TranscoderIP4, init, $, initProtoBuffer, DNS, init, goffset, getRawBytes, >, KeyPair, init, high, toString, cmp, SupportedWireTypes, formatItIMPL, verify, Signature, contains, toBytes, DigestSheme, IPFS, getField, init, libp2p_pki_schemes, isEmpty, ProtoScalar, hex, protocols, init, HTTPS, UNIX, WebSockets, getPtr, getBytes, TLS_WS, TranscoderIP6, readSeq, encode, MaResult, init, ProtoField, toBytes, writeSeq, ephemeral, &, DNS6, [], IpTransportProtocol, toOpenArray, init, IP4, TranscoderPort, isEnough, safeConvert, getField, init, createExchange, >=, init, payloadDomain, MaPattern, withValue, init, TranscoderOnion3, SignedPayload, key, toBytes, protoArgument, write, keyOpenArray, match, createProposal, WebSockets_DNS, $, isEmpty, getRequiredRepeatedField, init, initProtoBuffer, MAProtocol, decode, getPackedRepeatedField, getField, DNS4, readArray, selectBest, getBytes, P2PPattern, Envelope, hasPublicKey, init, isEnough, Reliable, hex, write, WS, init, encode, init, init, init, getField, match, getField, <, iv, CryptoError, getField, append, decode, WSS_IP, peekArray, PeerRecord, init, SupportedSchemes, getRepeatedField, getField, RsaDefaultKeySize, hash, Unreliable, SupportedSchemesInt, random, init, shuffle, init, validate, mapEq, getField, Onion3, TcpOnion3, concat, TranscoderP2P, AddressInfo, sign, write, EnvelopeError, encode, len, MaPatResult, init, shortLog, init, write, getBytes, write, init, UTP, PublicKey, WebSockets_IP, writePBVarint, ProtoFieldKind, protoArgument, getRepeatedField, ProtoError, getField, MultiAddress, ivOpenArray, orError, vsizeof, decodeExchange, getField, protoCode, MaInvalidAddress, writeVarint, items, write, getOrder, hash, TranscoderUnix, SignedPeerRecord, toException, toException, allFuturesThrowing, tryAndWarn, checkFutures, LPError +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/peerstore.html b/traffic-score-tests/libp2p/peerstore.html new file mode 100644 index 000000000..40192a6db --- /dev/null +++ b/traffic-score-tests/libp2p/peerstore.html @@ -0,0 +1,578 @@ + + + + + + + +libp2p/peerstore + + + + + + + + + + + + +
+
+

libp2p/peerstore

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

Stores generic informations about peers. +

Example:

+
# Will keep info of all connected peers +
+# last 50 disconnected peers
+let peerStore = PeerStore.new(capacity = 50)
+
+# Create a custom book type
+type MoodBook = ref object of PeerBook[string]
+
+var somePeerId = PeerId.random().expect("get random key")
+
+peerStore[MoodBook][somePeerId] = "Happy"
+doAssert peerStore[MoodBook][somePeerId] == "Happy"
##############################################################################

+ +
+

Types

+
+
+
AddressBook {.public.} = ref object of SeqPeerBook[MultiAddress]
+
+ + +Source   +Edit   + +
+
+
+
AgentBook {.public.} = ref object of PeerBook[string]
+
+ + +Source   +Edit   + +
+
+
+
KeyBook {.public.} = ref object of PeerBook[PublicKey]
+
+ + +Source   +Edit   + +
+
+
+
PeerBook[T] {.public.} = ref object of BasePeerBook
+  book*: Table[PeerId, T]
+
+
+ + +Source   +Edit   + +
+
+
+
PeerBookChangeHandler = proc (peerId: PeerId) {....gcsafe, raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
PeerStore {.public.} = ref object
+  capacity*: int
+  toClean*: seq[PeerId]
+
+
+ + +Source   +Edit   + +
+
+
+
ProtoBook {.public.} = ref object of SeqPeerBook[string]
+
+ + +Source   +Edit   + +
+
+
+
ProtoVersionBook {.public.} = ref object of PeerBook[string]
+
+ + +Source   +Edit   + +
+
+
+
SeqPeerBook[T] = ref object of PeerBook[seq[T]]
+
+ + +Source   +Edit   + +
+
+
+
SPRBook {.public.} = ref object of PeerBook[Envelope]
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `[]`[T](p: PeerStore; typ: type[T]): T {.public, ...raises: [].}
+
+ +Get a book from the PeerStore (ex: peerStoreAddressBook) +Source   +Edit   + +
+
+
+
proc `[]`[T](peerBook: PeerBook[T]; peerId: PeerId): T {.public, ...raises: [].}
+
+ +Get all known metadata of a provided peer, or default(T) if missing +Source   +Edit   + +
+
+ +
+
+
+
proc `[]=`[T](peerBook: PeerBook[T]; peerId: PeerId; entry: T) {.public,
+    ...raises: [].}
+
+ +Set metadata for a given peerId. +Source   +Edit   + +
+
+ +
+
+
+
proc addHandler[T](peerBook: PeerBook[T]; handler: PeerBookChangeHandler) {.
+    public, ...raises: [].}
+
+ +Adds a callback that will be called everytime the book changes +Source   +Edit   + +
+
+ +
+
+
+
proc cleanup(peerStore: PeerStore; peerId: PeerId) {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc contains[T](peerBook: PeerBook[T]; peerId: PeerId): bool {.public,
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc del(peerStore: PeerStore; peerId: PeerId) {.public, ...raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ +Delete the provided peer from every book. +Source   +Edit   + +
+
+
+
proc del[T](peerBook: PeerBook[T]; peerId: PeerId): bool {.public, ...raises: [].}
+
+ +Delete the provided peer from the book. Returns whether the peer was in the book +Source   +Edit   + +
+
+ +
+
+
+
proc getMostObservedProtosAndPorts(self: PeerStore): seq[MultiAddress] {.
+    ...raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc guessDialableAddr(self: PeerStore; ma: MultiAddress): MultiAddress {.
+    ...raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc identify(peerStore: PeerStore; muxer: Muxer) {.async, ...raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc len[T](peerBook: PeerBook[T]): int {.public, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc new(T: type PeerStore; identify: Identify; capacity = 1000): PeerStore {.
+    public, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc updatePeerInfo(peerStore: PeerStore; info: IdentifyInfo) {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/protobuf/minprotobuf.html b/traffic-score-tests/libp2p/protobuf/minprotobuf.html new file mode 100644 index 000000000..774295c31 --- /dev/null +++ b/traffic-score-tests/libp2p/protobuf/minprotobuf.html @@ -0,0 +1,842 @@ + + + + + + + +libp2p/protobuf/minprotobuf + + + + + + + + + + + + +
+
+

libp2p/protobuf/minprotobuf

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements minimal Google's ProtoBuf primitives.

+ +
+

Types

+
+
+
ProtoBuffer = object
+  buffer*: seq[byte]
+  offset*: int
+  length*: int
+  maxSize*: uint
+
+
+ +Protobuf's message representation object +Source   +Edit   + +
+
+
+
ProtoError {.pure.} = enum
+  VarintDecode, MessageIncomplete, BufferOverflow, MessageTooBig, BadWireType,
+  IncorrectBlob, RequiredFieldMissing
+
+ + +Source   +Edit   + +
+
+
+
ProtoField = object
+  index*: int
+  case kind*: ProtoFieldKind
+  of Varint:
+      vint*: uint64
+
+  of Fixed64:
+      vfloat64*: float64
+
+  of Length:
+      vbuffer*: seq[byte]
+
+  of Fixed32:
+      vfloat32*: float32
+
+  of StartGroup, EndGroup:
+      nil
+
+  
+
+ +Protobuf's message field representation object +Source   +Edit   + +
+
+
+
ProtoFieldKind = enum
+  Varint, Fixed64, Length, StartGroup, EndGroup, Fixed32
+
+ +Protobuf's field types enum +Source   +Edit   + +
+
+
+
ProtoFlags = enum
+  WithVarintLength, WithUint32BeLength, WithUint32LeLength
+
+ +Protobuf's encoding types +Source   +Edit   + +
+
+
+
ProtoHeader = object
+  wire*: ProtoFieldKind
+  index*: uint64
+
+
+ + +Source   +Edit   + +
+
+
+
ProtoResult[T] = Result[T, ProtoError]
+
+ + +Source   +Edit   + +
+
+
+
ProtoScalar = uint | uint32 | uint64 | zint | zint32 | zint64 | hint | hint32 |
+    hint64 |
+    float32 |
+    float64
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
SupportedWireTypes = [0, 1, 2, 5]
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc finish(pb: var ProtoBuffer) {....raises: [], public, ...tags: [], forbids: [].}
+
+ +Prepare protobuf's buffer pb for writing to stream. +Source   +Edit   + +
+
+ +
+
+
+
proc getField(pb: ProtoBuffer; field: int; output: var ProtoBuffer): ProtoResult[
+    bool] {.inline, ...raises: [], public, ...tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc getField[T: byte | char](data: ProtoBuffer; field: int;
+                              output: var openArray[T]; outlen: var int): ProtoResult[
+    bool] {....raises: [], public.}
+
+ + +Source   +Edit   + +
+
+
+
proc getField[T: ProtoScalar](data: ProtoBuffer; field: int; output: var T): ProtoResult[
+    bool] {....raises: [], public.}
+
+ + +Source   +Edit   + +
+
+
+
proc getField[T: seq[byte] | string](data: ProtoBuffer; field: int;
+                                     output: var T): ProtoResult[bool] {.
+    ...raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc getPackedRepeatedField[T: ProtoScalar](data: ProtoBuffer; field: int;
+    output: var seq[T]): ProtoResult[bool] {....raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc getRepeatedField[T: ProtoScalar](data: ProtoBuffer; field: int;
+                                      output: var seq[T]): ProtoResult[bool] {.
+    ...raises: [], public.}
+
+ + +Source   +Edit   + +
+
+
+
proc getRepeatedField[T: seq[byte] | string](data: ProtoBuffer; field: int;
+    output: var seq[T]): ProtoResult[bool] {....raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc getRequiredField[T](pb: ProtoBuffer; field: int; output: var T): ProtoResult[
+    void] {.inline, ...raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc getRequiredRepeatedField[T](pb: ProtoBuffer; field: int; output: var seq[T]): ProtoResult[
+    void] {.inline, ...raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc initProtoBuffer(data: openArray[byte]; offset = 0;
+                     options: set[ProtoFlags] = {}; maxSize = MaxMessageSize): ProtoBuffer {.
+    ...raises: [], public, ...tags: [], forbids: [].}
+
+ +Initialize ProtoBuffer with copy of data. +Source   +Edit   + +
+
+
+
proc initProtoBuffer(data: seq[byte]; offset = 0; options: set[ProtoFlags] = {};
+                     maxSize = MaxMessageSize): ProtoBuffer {....raises: [],
+    public, ...tags: [], forbids: [].}
+
+ +Initialize ProtoBuffer with shallow copy of data. +Source   +Edit   + +
+
+
+
proc initProtoBuffer(options: set[ProtoFlags] = {}; maxSize = MaxMessageSize): ProtoBuffer {.
+    ...raises: [], public, ...tags: [], forbids: [].}
+
+ +Initialize ProtoBuffer with new sequence of capacity cap. +Source   +Edit   + +
+
+ +
+
+
+
proc vsizeof(field: ProtoField): int {.inline, ...raises: [], public, ...tags: [],
+                                       forbids: [].}
+
+ +Returns number of bytes required to store protobuf's field field. +Source   +Edit   + +
+
+ +
+
+
+
proc write(pb: var ProtoBuffer; field: int; value: ProtoBuffer) {.inline,
+    ...raises: [], public, ...tags: [], forbids: [].}
+
+ +Encode Protobuf's sub-message value and store it to protobuf's buffer pb with field number field. +Source   +Edit   + +
+
+
+
proc write[T: byte | char](pb: var ProtoBuffer; field: int; value: openArray[T]) {.
+    ...raises: [], public.}
+
+ + +Source   +Edit   + +
+
+
+
proc write[T: ProtoScalar](pb: var ProtoBuffer; field: int; value: T) {.
+    ...raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc writePacked[T: ProtoScalar](pb: var ProtoBuffer; field: int;
+                                 value: openArray[T]) {....raises: [], public.}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template checkFieldNumber(i: int)
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template getLen(pb: ProtoBuffer): int
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template getProtoHeader(field: ProtoField): uint64
+
+ +Get protobuf's field header integer for field. +Source   +Edit   + +
+
+
+
template getProtoHeader(index: int; wire: ProtoFieldKind): uint64
+
+ +Get protobuf's field header integer for index and wire. +Source   +Edit   + +
+
+ +
+
+
+
template getPtr(pb: ProtoBuffer): pointer
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template isEmpty(pb: ProtoBuffer): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template isEnough(pb: ProtoBuffer; length: int): bool
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template toOpenArray(pb: ProtoBuffer): untyped
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/protocols/connectivity/autonat/core.html b/traffic-score-tests/libp2p/protocols/connectivity/autonat/core.html new file mode 100644 index 000000000..d7506cc34 --- /dev/null +++ b/traffic-score-tests/libp2p/protocols/connectivity/autonat/core.html @@ -0,0 +1,435 @@ + + + + + + + +libp2p/protocols/connectivity/autonat/core + + + + + + + + + + + + +
+
+

libp2p/protocols/connectivity/autonat/core

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
AutonatDial = object
+  peerInfo*: Opt[AutonatPeerInfo]
+
+
+ + +Source   +Edit   + +
+
+
+
AutonatDialResponse = object
+  status*: ResponseStatus
+  text*: Opt[string]
+  ma*: Opt[MultiAddress]
+
+
+ + +Source   +Edit   + +
+
+
+
AutonatError = object of LPError
+
+ + +Source   +Edit   + +
+
+
+
AutonatMsg = object
+  msgType*: MsgType
+  dial*: Opt[AutonatDial]
+  response*: Opt[AutonatDialResponse]
+
+
+ + +Source   +Edit   + +
+
+
+
AutonatPeerInfo = object
+  id*: Opt[PeerId]
+  addrs*: seq[MultiAddress]
+
+
+ + +Source   +Edit   + +
+
+
+
AutonatUnreachableError = object of LPError
+
+ + +Source   +Edit   + +
+
+
+
MsgType = enum
+  Dial = 0, DialResponse = 1
+
+ + +Source   +Edit   + +
+
+
+
NetworkReachability {.pure.} = enum
+  Unknown, NotReachable, Reachable
+
+ + +Source   +Edit   + +
+
+
+
ResponseStatus = enum
+  Ok = 0, DialError = 100, DialRefused = 101, BadRequest = 200,
+  InternalError = 300
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
AddressLimit = 8
+
+ + +Source   +Edit   + +
+
+
+
AutonatCodec = "/libp2p/autonat/1.0.0"
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc decode(__4412408491: typedesc[AutonatMsg]; buf: seq[byte]): Opt[AutonatMsg] {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc encode(d: AutonatDial): ProtoBuffer {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc encode(msg: AutonatMsg): ProtoBuffer {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc encode(r: AutonatDialResponse): ProtoBuffer {....raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/protocols/identify.html b/traffic-score-tests/libp2p/protocols/identify.html new file mode 100644 index 000000000..6f458513c --- /dev/null +++ b/traffic-score-tests/libp2p/protocols/identify.html @@ -0,0 +1,560 @@ + + + + + + + +libp2p/protocols/identify + + + + + + + + + + + + +
+
+

libp2p/protocols/identify

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

Identify and Push Identify implementation

+ +
+

Types

+
+
+
Identify = ref object of LPProtocol
+  peerInfo*: PeerInfo
+  sendSignedPeerRecord*: bool
+  observedAddrManager*: ObservedAddrManager
+
+
+ + +Source   +Edit   + +
+
+
+
IdentifyError = object of LPError
+
+ + +Source   +Edit   + +
+
+
+
IdentifyInfo {.public.} = object
+  pubkey*: Option[PublicKey]
+  peerId*: PeerId
+  addrs*: seq[MultiAddress]
+  observedAddr*: Option[MultiAddress]
+  protoVersion*: Option[string]
+  agentVersion*: Option[string]
+  protos*: seq[string]
+  signedPeerRecord*: Option[Envelope]
+
+
+ + +Source   +Edit   + +
+
+
+
IdentifyNoPubKeyError = object of IdentifyError
+
+ + +Source   +Edit   + +
+
+
+
IdentifyPush = ref object of LPProtocol
+  
+
+ + +Source   +Edit   + +
+
+
+
IdentifyPushHandler = proc (peer: PeerId; newInfo: IdentifyInfo): Future[void] {.
+    ...gcsafe, raises: [], public().}
+
+ + +Source   +Edit   + +
+
+
+
IdentityInvalidMsgError = object of IdentifyError
+
+ + +Source   +Edit   + +
+
+
+
IdentityNoMatchError = object of IdentifyError
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
AgentVersion = "nim-libp2p/0.0.1"
+
+ + +Source   +Edit   + +
+
+
+
IdentifyCodec = "/ipfs/id/1.0.0"
+
+ + +Source   +Edit   + +
+
+
+
IdentifyPushCodec = "/ipfs/id/push/1.0.0"
+
+ + +Source   +Edit   + +
+
+
+
ProtoVersion = "ipfs/0.1.0"
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc decodeMsg(buf: seq[byte]): Opt[IdentifyInfo] {....raises: [],
+    tags: [RootEffect, TimeEffect, WriteIOEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc identify(self: Identify; conn: Connection; remotePeerId: PeerId): Future[
+    IdentifyInfo] {.async, ...gcsafe, raises: [],
+                    tags: [RootEffect, TimeEffect, WriteIOEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc init(p: IdentifyPush) {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc new(T: typedesc[Identify]; peerInfo: PeerInfo; sendSignedPeerRecord = false): T:type {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc new(T: typedesc[IdentifyPush]; handler: IdentifyPushHandler = nil): T:type {.
+    public, ...raises: [].}
+
+ +Create a IdentifyPush protocol. handler will be called every time a peer sends us new PeerInfo +Source   +Edit   + +
+
+ +
+
+
+
proc push(p: IdentifyPush; peerInfo: PeerInfo; conn: Connection) {.async,
+    public, ...raises: [], tags: [], forbids: [].}
+
+ +Send new peerInfos to a connection +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method init(p: Identify) {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template expandItIMPL(record: auto; it_name: static string; it: IdentifyInfo)
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/protocols/protocol.html b/traffic-score-tests/libp2p/protocols/protocol.html new file mode 100644 index 000000000..94bc35bac --- /dev/null +++ b/traffic-score-tests/libp2p/protocols/protocol.html @@ -0,0 +1,423 @@ + + + + + + + +libp2p/protocols/protocol + + + + + + + + + + + + +
+
+

libp2p/protocols/protocol

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
LPProtocol = ref object of RootObj
+  codecs*: seq[string]
+  handler*: LPProtoHandler   ## this handler gets invoked by the protocol negotiator
+  started*: bool
+  
+
+ + +Source   +Edit   + +
+
+
+
LPProtoHandler = proc (conn: Connection; proto: string): Future[void] {....gcsafe,
+    raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
DefaultMaxIncomingStreams = 10
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
func codec(p: LPProtocol): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func codec=(p: LPProtocol; codec: string) {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc maxIncomingStreams(p: LPProtocol): int {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc maxIncomingStreams=(p: LPProtocol; val: int) {....raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc new(T: type LPProtocol; codecs: seq[string]; handler: LPProtoHandler;
+         maxIncomingStreams: Opt[int] | int = Opt.none(int)): T:type {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method init(p: LPProtocol) {.base, ...gcsafe, raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method start(p: LPProtocol) {.async, base, ...raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method stop(p: LPProtocol) {.async, base, ...raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/protocols/secure/secure.html b/traffic-score-tests/libp2p/protocols/secure/secure.html new file mode 100644 index 000000000..61c309506 --- /dev/null +++ b/traffic-score-tests/libp2p/protocols/secure/secure.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/protocols/secure/secure + + + + + + + + + + + + +
+
+

libp2p/protocols/secure/secure

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/routing_record.html b/traffic-score-tests/libp2p/routing_record.html new file mode 100644 index 000000000..4b9fccd9b --- /dev/null +++ b/traffic-score-tests/libp2p/routing_record.html @@ -0,0 +1,373 @@ + + + + + + + +libp2p/routing_record + + + + + + + + + + + + +
+
+

libp2p/routing_record

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements Routing Records.Functions related to signed peer records

+ +
+

Types

+
+
+
AddressInfo = object
+  address*: MultiAddress
+
+
+ + +Source   +Edit   + +
+
+
+
PeerRecord = object
+  peerId*: PeerId
+  seqNo*: uint64
+  addresses*: seq[AddressInfo]
+
+
+ + +Source   +Edit   + +
+
+ + +
+
+
+

Procs

+
+
+
+
proc checkValid(spr: SignedPeerRecord): Result[void, EnvelopeError] {.
+    ...raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc decode(T: typedesc[PeerRecord]; buffer: seq[byte]): Result[PeerRecord,
+    ProtoError] {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc encode(record: PeerRecord): seq[byte] {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc init(T: typedesc[PeerRecord]; peerId: PeerId; addresses: seq[MultiAddress];
+          seqNo = getTime().toUnix().uint64): T:type {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc payloadDomain(T: typedesc[PeerRecord]): string {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc payloadType(T: typedesc[PeerRecord]): seq[byte] {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ formatItIMPL, hash, shortLog, random, $, write, PeerId, ==, getField, <=, capLen, init, validate, init, match, <, getBytes, maxInlineKeyLength, write, withValue, safeConvert, shortLog, >=, withValue, public, shortLog, compilesOr, toBytes, match, valueOr, init, init, init, toOpt, init, hasPublicKey, >, hex, len, exceptionToAssert, cmp, extractPublicKey, DNS_OR_IP, hash, UDP_DNS, MaError, IPFS, MaPatternOp, isEmpty, WS_DNS, initVBuffer, ProtoScalar, getProtoHeader, hex, protocols, bytes, ==, getLen, HTTPS, UNIX, TranscoderIP6, encode, [], MaResult, init, ProtoField, peekVarint, getRequiredRepeatedField, mapOr, writeSeq, WebSockets_IP, &, DNS6, TLS_WS, [], IpTransportProtocol, QUIC, toOpenArray, IP4, TranscoderPort, withValue, safeConvert, getRequiredField, $, WS_IP, withValue, public, MAKind, getField, checkFieldNumber, TranscoderOnion3, getRepeatedField, matchPartial, protoArgument, match, data, WebSockets, $, isEmpty, HTTP, initVBuffer, finish, VBuffer, init, TcpOnion3, initProtoBuffer, MAProtocol, peekSeq, getPackedRepeatedField, toOpt, getProtoHeader, ProtoHeader, IP, getField, protoAddress, DNS4, readArray, getPtr, isEnough, P2PPattern, CircuitRelay, contains, isEnough, Reliable, ProtoBuffer, len, WS, exceptionToAssert, mapAnd, UDP_IP, DNSANY, DNSADDR, append, write, WSS_IP, peekArray, WSS, readSeq, getRepeatedField, TCP_IP, getField, writePacked, Unreliable, TCP_DNS, capLen, init, protoName, protoArgument, validate, mapEq, Onion3, MaPattern, TranscoderIP6Zone, $, initProtoBuffer, concat, TranscoderP2P, WSS_DNS, writeLPVarint, write, ProtoResult, WebRTCDirect, len, UDP, MaPatResult, TranscoderOnion, write, init, shortLog, items, isEmpty, writeArray, write, WebSockets_DNS, init, UTP, [], IP6, shortLog, ProtoFlags, finish, writePBVarint, valueOr, ProtoFieldKind, TCP, TranscoderDNS, getRepeatedField, ProtoError, init, init, getField, MultiAddress, &=, readVarint, compilesOr, vsizeof, getField, TranscoderIP4, init, initVBuffer, protoCode, MaInvalidAddress, initProtoBuffer, DNS, write, TranscoderUnix, high, toString, writeVarint, SupportedWireTypes, verify, Signature, shortLog, $, toBytes, DigestSheme, ephemeral, getField, mac, init, decodeProposal, write, ==, init, sign, init, encode, decodeExchange, shuffle, random, Secret, write, init, init, withValue, safeConvert, createExchange, supported, withValue, public, init, SignedPayload, toBytes, PrivateKey, keyOpenArray, payload, init, getBytes, toOpt, init, ECDHEScheme, newRng, selectBest, write, Envelope, getPublicKey, init, init, random, decode, exceptionToAssert, getField, getField, iv, init, CryptoError, ==, init, write, SupportedSchemes, libp2p_pki_schemes, init, toBytes, random, capLen, macOpenArray, init, write, toRawBytes, createProposal, init, random, CryptoResult, init, write, EnvelopeError, SupportedSchemesInt, encode, decode, init, ephemeral, shortLog, init, getBytes, init, shortLog, PKScheme, PublicKey, stretchKeys, valueOr, getBytes, getField, ivOpenArray, RsaDefaultKeySize, compilesOr, orError, init, $, goffset, getRawBytes, getOrder, KeyPair, key, init +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/signed_envelope.html b/traffic-score-tests/libp2p/signed_envelope.html new file mode 100644 index 000000000..adf1fd0c6 --- /dev/null +++ b/traffic-score-tests/libp2p/signed_envelope.html @@ -0,0 +1,440 @@ + + + + + + + +libp2p/signed_envelope + + + + + + + + + + + + +
+
+

libp2p/signed_envelope

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements Signed Envelope.

+ +
+

Types

+
+
+
Envelope = object
+  publicKey*: PublicKey
+  domain*: string
+  payloadType*: seq[byte]
+  signature*: Signature
+
+
+ + +Source   +Edit   + +
+
+
+
EnvelopeError = enum
+  EnvelopeInvalidProtobuf, EnvelopeFieldMissing, EnvelopeInvalidSignature,
+  EnvelopeWrongType
+
+ + +Source   +Edit   + +
+
+
+
SignedPayload[T] = object
+  envelope*: Envelope
+  data*: T
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc decode(T: typedesc[Envelope]; buf: seq[byte]; domain: string): Result[
+    Envelope, EnvelopeError] {....raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc decode[T](__4160750259: typedesc[SignedPayload[T]]; buffer: seq[byte]): Result[
+    SignedPayload[T], EnvelopeError] {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc encode(env: Envelope): Result[seq[byte], CryptoError] {....raises: [],
+    tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc encode[T](msg: SignedPayload[T]): Result[seq[byte], CryptoError] {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc getField(pb: ProtoBuffer; field: int; value: var Envelope; domain: string): ProtoResult[
+    bool] {.inline, ...raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc getField[T](pb: ProtoBuffer; field: int; value: var SignedPayload[T]): ProtoResult[
+    bool] {.inline, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc init(T: typedesc[Envelope]; privateKey: PrivateKey; payloadType: seq[byte];
+          payload: seq[byte]; domain: string): Result[Envelope, CryptoError] {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+
+
proc init[T](__4160750223: typedesc[SignedPayload[T]]; privateKey: PrivateKey;
+             data: T): Result[SignedPayload[T], CryptoError] {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc payload(env: Envelope): seq[byte] {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc write(pb: var ProtoBuffer; field: int; env: Envelope): Result[void,
+    CryptoError] {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/stream/bufferstream.html b/traffic-score-tests/libp2p/stream/bufferstream.html new file mode 100644 index 000000000..52ca12ae5 --- /dev/null +++ b/traffic-score-tests/libp2p/stream/bufferstream.html @@ -0,0 +1,474 @@ + + + + + + + +libp2p/stream/bufferstream + + + + + + + + + + + + +
+
+

libp2p/stream/bufferstream

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
BufferStream = ref object of Connection
+  readQueue*: AsyncQueue[seq[byte]]
+  readBuf*: StreamSeq
+  pushing*: bool
+  reading*: bool
+  pushedEof*: bool
+  returnedEof*: bool
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
BufferStreamTrackerName = "BufferStream"
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc len(s: BufferStream): int {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc new(T: typedesc[BufferStream]; timeout: Duration = DefaultConnectionTimeout): T:type {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(s: BufferStream): auto {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method atEof(s: BufferStream): bool {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method closeImpl(s: BufferStream): Future[void] {....raises: [], tags: [],
+    forbids: [].}
+
+ +close the stream and clear the buffer +Source   +Edit   + +
+
+ +
+
+
+
method initStream(s: BufferStream) {....raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method pushData(s: BufferStream; data: seq[byte]) {.base, async, ...raises: [],
+    tags: [], forbids: [].}
+
+ +

Write bytes to internal read buffer, use this to fill up the buffer with data.

+

pushTo will block if the queue is full, thus maintaining backpressure.

+ +Source   +Edit   + +
+
+ +
+
+
+
method pushEof(s: BufferStream) {.base, async, ...raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method readOnce(s: BufferStream; pbytes: pointer; nbytes: int): Future[int] {.
+    async, ...raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template formatItIMPL(it: BufferStream): auto
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ newLPStreamWriteError, DNS_OR_IP, ProtoHeader, shortLog, init, random, UDP_DNS, $, getProtoHeader, MaError, ephemeral, MaPatternOp, WS_DNS, initVBuffer, getProtoHeader, MaxSizeError, ProtoFlags, getLen, ECDHEScheme, shortLog, init, init, closed, [], decode, macOpenArray, random, init, VBuffer, Secret, peekVarint, random, $, validate, mapOr, init, bytes, maxInlineKeyLength, TranscoderDNS, QUIC, [], key, ephemeral, withValue, getRequiredField, getField, init, writeLp, WS_IP, write, public, MAKind, write, DNSANY, getField, checkFieldNumber, valueOr, init, getRepeatedField, matchPartial, libp2p_pki_schemes, getBytes, len, ==, readVarint, readLp, HTTP, initVBuffer, mac, atEof, TcpOnion3, write, toOpt, fullAddrs, payloadType, <=, LPStreamError, init, IP, protoAddress, newRng, DefaultConnectionTimeout, ==, checkValid, getPublicKey, exceptionToAssert, decodeProposal, len, CircuitRelay, extractPublicKey, mapAnd, new, verify, UDP_IP, new, newLPStreamEOFError, init, ==, DNSADDR, AddressMapper, write, PeerId, WSS, LPStream, TCP_IP, hash, writePacked, init, readSeq, toBytes, TCP_DNS, shortLog, encode, len, capLen, init, protoName, toRawBytes, TranscoderIP6Zone, $, initProtoBuffer, newLPStreamReadError, init, WSS_DNS, match, writeLPVarint, CryptoResult, parseFullAddress, ProtoResult, WebRTCDirect, init, UDP, TranscoderOnion, StreamTracker, write, init, LPStreamResetError, isEmpty, writeArray, LPStreamReadError, decode, LPStreamIncompleteError, [], LPStreamEOFError, IP6, shortLog, initVBuffer, PKScheme, payload, init, init, Connection, write, init, TCP, PrivateKey, getBytes, newLPStreamIncorrectDefect, init, &=, PeerInfoError, newLPStreamClosedError, random, write, compilesOr, TranscoderIP4, init, initProtoBuffer, toException, DNS, UTP, goffset, readVarint, getRawBytes, >, KeyPair, init, init, high, toString, cmp, init, SupportedWireTypes, formatItIMPL, formatItIMPL, formatItIMPL, Signature, contains, hash, formatItIMPL, toBytes, DigestSheme, IPFS, getField, readOnce, init, isEmpty, ProtoScalar, shortLog, data, LPStreamIncorrectDefect, hex, protocols, finish, update, HTTPS, tryAndWarn, WebSockets, LPError, getPtr, write, TLS_WS, sign, finish, encode, MaResult, init, ProtoField, init, toBytes, writeSeq, init, &, DNS6, IpTransportProtocol, toOpenArray, allFuturesThrowing, IP4, TranscoderPort, isEnough, safeConvert, getField, init, createExchange, >=, init, payloadDomain, $, MaPattern, withValue, init, LPStreamLimitError, TranscoderOnion3, SignedPayload, closeImpl, toBytes, protoArgument, newLPStreamLimitError, write, keyOpenArray, match, createProposal, parseFullAddress, $, isEmpty, supported, getRequiredRepeatedField, init, newLPStreamIncompleteError, newLPStreamReadError, initProtoBuffer, MAProtocol, newLPStreamResetError, getPackedRepeatedField, initStream, getField, shortLog, DNS4, getWrapped, readArray, selectBest, write, P2PPattern, Envelope, hasPublicKey, toException, init, isEnough, init, Reliable, addrs, hex, ProtoBuffer, getBytes, WS, stretchKeys, encode, init, init, getField, getField, match, getField, <, iv, readLine, Eof, CryptoError, hash, append, vsizeof, init, WebSockets_DNS, WSS_IP, LPStreamConnDownError, peekArray, UNIX, PeerRecord, SupportedSchemes, getRepeatedField, LPStreamWriteError, Unreliable, SupportedSchemesInt, random, checkFutures, shuffle, validate, $, protoCode, mapEq, Onion3, write, LPStreamTrackerName, concat, TranscoderP2P, PeerInfo, AddressInfo, ConnectionTrackerName, TranscoderIP6, write, EnvelopeError, encode, newLPStreamRemoteClosedError, MaPatResult, Direction, InvalidVarintError, decode, shortLog, items, ==, init, peekSeq, getBytes, write, PublicKey, WebSockets_IP, writeLp, writePBVarint, ProtoFieldKind, readExactly, protoArgument, getRepeatedField, ProtoError, newLPStreamConnDownError, initStream, getField, MultiAddress, ivOpenArray, TimeoutHandler, orError, decodeExchange, getField, LPStreamRemoteClosedError, setupStreamTracker, MaInvalidAddress, LPStreamClosedError, RsaDefaultKeySize, write, getOrder, TranscoderUnix, SignedPeerRecord, join, writeVarint +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/stream/chronosstream.html b/traffic-score-tests/libp2p/stream/chronosstream.html new file mode 100644 index 000000000..623d254b8 --- /dev/null +++ b/traffic-score-tests/libp2p/stream/chronosstream.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/stream/chronosstream + + + + + + + + + + + + +
+
+

libp2p/stream/chronosstream

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/stream/connection.html b/traffic-score-tests/libp2p/stream/connection.html new file mode 100644 index 000000000..124ead29f --- /dev/null +++ b/traffic-score-tests/libp2p/stream/connection.html @@ -0,0 +1,457 @@ + + + + + + + +libp2p/stream/connection + + + + + + + + + + + + +
+
+

libp2p/stream/connection

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
Connection = ref object of LPStream
+  activity*: bool
+  timeout*: Duration
+  timeoutHandler*: TimeoutHandler
+  peerId*: PeerId
+  observedAddr*: Opt[MultiAddress]
+  protocol*: string
+  transportDir*: Direction
+  when defined(libp2p_agents_metrics):
+      shortAgent*: string
+
+  
+
+ + +Source   +Edit   + +
+
+
+
TimeoutHandler = proc (): Future[void] {....gcsafe, raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
ConnectionTrackerName = "Connection"
+
+ + +Source   +Edit   + +
+
+
+
DefaultConnectionTimeout = (value: 300000000000)
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
func hash(p: Connection): Hash {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc new(C: type Connection; peerId: PeerId; dir: Direction;
+         observedAddr: Opt[MultiAddress];
+         timeout: Duration = DefaultConnectionTimeout;
+         timeoutHandler: TimeoutHandler = nil): Connection {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(conn: Connection): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method closeImpl(s: Connection): Future[void] {....raises: [], tags: [RootEffect],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method getWrapped(s: Connection): Connection {.base, ...raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method initStream(s: Connection) {....raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template formatItIMPL(it: Connection): auto
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ allFuturesThrowing, InvalidVarintError, newLPStreamWriteError, newLPStreamIncorrectDefect, writeLp, newLPStreamReadError, formatItIMPL, newLPStreamEOFError, initStream, newLPStreamClosedError, newLPStreamLimitError, join, newLPStreamIncompleteError, LPStreamTrackerName, Eof, LPStreamError, atEof, LPStreamIncompleteError, LPStreamRemoteClosedError, readLp, readVarint, setupStreamTracker, LPStreamEOFError, newLPStreamReadError, LPStreamResetError, LPStreamConnDownError, LPStreamLimitError, readOnce, toException, toException, LPStream, LPStreamClosedError, LPStreamWriteError, StreamTracker, MaxSizeError, write, LPStreamIncorrectDefect, writeLp, newLPStreamRemoteClosedError, LPStreamReadError, checkFutures, readLine, closed, Direction, readExactly, tryAndWarn, newLPStreamConnDownError, newLPStreamResetError, shortLog, LPError, ProtoHeader, shortLog, UDP_DNS, ephemeral, init, MaPatternOp, getProtoHeader, shortLog, init, $, validate, hash, init, TLS_WS, TranscoderDNS, init, ephemeral, getField, MAKind, getField, checkFieldNumber, getRepeatedField, getBytes, len, &, peekSeq, fullAddrs, <=, init, getPublicKey, exceptionToAssert, new, DNSANY, DNSADDR, AddressMapper, WSS, toBytes, TCP_DNS, shortLog, encode, len, supported, ==, TranscoderIP6Zone, $, WSS_DNS, <, $, PeerInfo, TranscoderOnion, write, key, writeArray, PeerId, IP6, shortLog, payload, TCP, PrivateKey, getBytes, init, &=, init, $, getRawBytes, KeyPair, update, SupportedWireTypes, hash, init, DNS4, isEmpty, ProtoScalar, data, HTTPS, tryAndWarn, TranscoderIP6, encode, MaResult, DNS6, [], IpTransportProtocol, toOpenArray, allFuturesThrowing, TranscoderPort, isEnough, write, >=, init, payloadDomain, $, MaPattern, TranscoderOnion3, protoArgument, write, keyOpenArray, match, WebSockets_DNS, isEmpty, getRequiredRepeatedField, initProtoBuffer, init, init, getField, selectBest, getPtr, Envelope, init, finish, Reliable, addrs, stretchKeys, match, getField, CryptoError, append, vsizeof, parseFullAddress, init, getRepeatedField, checkFutures, shuffle, init, validate, protoCode, getField, TranscoderP2P, sign, getBytes, encode, WebSockets, shortLog, items, getBytes, init, ProtoFieldKind, protoArgument, getField, readVarint, orError, decodeExchange, MaInvalidAddress, writeVarint, getOrder, TranscoderUnix, SignedPeerRecord, DNS_OR_IP, decode, random, getProtoHeader, MaError, finish, matchPartial, WS_DNS, initVBuffer, ProtoFlags, ==, getLen, ECDHEScheme, init, [], random, Secret, peekVarint, random, mapOr, bytes, maxInlineKeyLength, QUIC, withValue, getRequiredField, mac, WS_IP, public, write, init, valueOr, init, HTTP, initVBuffer, TcpOnion3, write, toOpt, payloadType, decodeProposal, $, IP, protoAddress, newRng, checkValid, len, CircuitRelay, extractPublicKey, mapAnd, UDP_IP, init, ==, write, TCP_IP, writePacked, readSeq, capLen, protoName, toRawBytes, initProtoBuffer, toException, init, match, writeLPVarint, CryptoResult, parseFullAddress, ProtoResult, WebRTCDirect, init, UDP, init, isEmpty, decode, initVBuffer, decode, PKScheme, random, write, init, write, PeerInfoError, compilesOr, TranscoderIP4, initProtoBuffer, toException, DNS, goffset, >, init, high, toString, init, cmp, init, formatItIMPL, formatItIMPL, Signature, toBytes, DigestSheme, IPFS, MultiAddress, hex, protocols, init, UNIX, init, ProtoField, toBytes, writeSeq, ==, init, [], IP4, safeConvert, getField, init, createExchange, withValue, SignedPayload, toBytes, init, MAProtocol, getPackedRepeatedField, contains, libp2p_pki_schemes, readArray, P2PPattern, hasPublicKey, isEnough, hex, write, WS, encode, init, getField, iv, getField, WSS_IP, peekArray, PeerRecord, SupportedSchemes, Unreliable, SupportedSchemesInt, random, LPError, macOpenArray, mapEq, Onion3, concat, AddressInfo, write, EnvelopeError, createProposal, MaPatResult, ProtoBuffer, init, init, write, write, UTP, verify, init, PublicKey, WebSockets_IP, VBuffer, writePBVarint, getRepeatedField, ProtoError, init, ivOpenArray, RsaDefaultKeySize, getField, write, toException, toException, allFuturesThrowing, tryAndWarn, checkFutures, LPError +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/stream/lpstream.html b/traffic-score-tests/libp2p/stream/lpstream.html new file mode 100644 index 000000000..ec992cfa4 --- /dev/null +++ b/traffic-score-tests/libp2p/stream/lpstream.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/stream/lpstream + + + + + + + + + + + + +
+
+

libp2p/stream/lpstream

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/stream/streamseq.html b/traffic-score-tests/libp2p/stream/streamseq.html new file mode 100644 index 000000000..eed2807d9 --- /dev/null +++ b/traffic-score-tests/libp2p/stream/streamseq.html @@ -0,0 +1,402 @@ + + + + + + + +libp2p/stream/streamseq + + + + + + + + + + + + +
+
+

libp2p/stream/streamseq

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+
+

Types

+
+
+
StreamSeq = object
+  
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
func add(v: var StreamSeq; data: openArray[byte]) {....raises: [], tags: [],
+    forbids: [].}
+
+ +Add data - the equivalent of buf.prepare(n) = data; buf.commit(n) +Source   +Edit   + +
+
+ +
+
+
+
func assign(v: var StreamSeq; buf: openArray[byte]) {....raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func clear(v: var StreamSeq) {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func consume(v: var StreamSeq; n: int) {....raises: [], tags: [], forbids: [].}
+
+ +Mark n bytes that were returned via data as consumed +Source   +Edit   + +
+
+ +
+
+
+
func consumeTo(v: var StreamSeq; buf: var openArray[byte]): int {....raises: [],
+    tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template commit(v: var StreamSeq; n: int)
+
+ +Mark n bytes in the buffer returned by prepare as ready for reading +Source   +Edit   + +
+
+ +
+
+
+
template data(v: StreamSeq): openArray[byte]
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template len(v: StreamSeq): int
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template prepare(v: var StreamSeq; n: int): var openArray[byte]
+
+ +Return a buffer that is at least n bytes long +Source   +Edit   + +
+
+ +
+
+
+
template toOpenArray(v: StreamSeq; b, e: int): openArray[byte]
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/switch.html b/traffic-score-tests/libp2p/switch.html new file mode 100644 index 000000000..5d458e3ad --- /dev/null +++ b/traffic-score-tests/libp2p/switch.html @@ -0,0 +1,691 @@ + + + + + + + +libp2p/switch + + + + + + + + + + + + +
+
+

libp2p/switch

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

The switch is the core of libp2p, which brings together the transports, the connection manager, the upgrader and other parts to allow programs to use libp2p

+ +
+

Types

+
+
+
Service = ref object of RootObj
+  
+
+ + +Source   +Edit   + +
+
+
+
Switch {.public.} = ref object of Dial
+  peerInfo*: PeerInfo
+  connManager*: ConnManager
+  transports*: seq[Transport]
+  ms*: MultistreamSelect
+  dialer*: Dial
+  peerStore*: PeerStore
+  nameResolver*: NameResolver
+  services*: seq[Service]
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Consts

+
+
+
ConcurrentUpgrades = 4
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc addConnEventHandler(s: Switch; handler: ConnEventHandler;
+                         kind: ConnEventKind) {.public, ...raises: [], tags: [],
+    forbids: [].}
+
+ +

Adds a ConnEventHandler, which will be triggered when a connection to a peer is created or dropped. There may be multiple connections per peer.

+

The handler should not raise.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc addPeerEventHandler(s: Switch; handler: PeerEventHandler;
+                         kind: PeerEventKind) {.public, ...raises: [], tags: [],
+    forbids: [].}
+
+ +

Adds a PeerEventHandler, which will be triggered when a peer connects or disconnects from us.

+

The handler should not raise.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc connectedPeers(s: Switch; dir: Direction): seq[PeerId] {....raises: [],
+    tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc dial(s: Switch; peerId: PeerId; addrs: seq[MultiAddress]; proto: string): Future[
+    Connection] {.public, ...raises: [], tags: [], forbids: [].}
+
+ +Connected to a peer and open a stream with the specified proto +Source   +Edit   + +
+
+
+
proc dial(s: Switch; peerId: PeerId; proto: string): Future[Connection] {.
+    public, ...raises: [], tags: [], forbids: [].}
+
+ +Open a stream to a connected peer with the specified proto +Source   +Edit   + +
+
+ +
+
+
+
proc disconnect(s: Switch; peerId: PeerId): Future[void] {....gcsafe, public,
+    ...raises: [], tags: [], forbids: [].}
+
+ +Disconnect from a peer, waiting for the connection(s) to be dropped +Source   +Edit   + +
+
+ +
+
+
+
proc isConnected(s: Switch; peerId: PeerId): bool {.public, ...raises: [],
+    tags: [], forbids: [].}
+
+ +returns true if the peer has one or more associated connections +Source   +Edit   + +
+
+ +
+
+
+
proc mount[T: LPProtocol](s: Switch; proto: T; matcher: Matcher = nil) {....gcsafe,
+    raises: [LPError], public, ...raises: [].}
+
+ +mount a protocol to the switch +Source   +Edit   + +
+
+ +
+
+
+
proc newSwitch(peerInfo: PeerInfo; transports: seq[Transport];
+               secureManagers: openArray[Secure] = []; connManager: ConnManager;
+               ms: MultistreamSelect; peerStore: PeerStore;
+               nameResolver: NameResolver = nil; services = newSeq()): Switch {.
+    ...raises: [LPError], raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc removeConnEventHandler(s: Switch; handler: ConnEventHandler;
+                            kind: ConnEventKind) {.public, ...raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc removePeerEventHandler(s: Switch; handler: PeerEventHandler;
+                            kind: PeerEventKind) {.public, ...raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc start(s: Switch) {.async, ...gcsafe, public, ...raises: [],
+                        tags: [TimeEffect, WriteIOEffect, RootEffect],
+                        forbids: [].}
+
+ +Start listening on every transport +Source   +Edit   + +
+
+ +
+
+
+
proc stop(s: Switch) {.async, public, ...raises: [],
+                       tags: [TimeEffect, WriteIOEffect, RootEffect],
+                       forbids: [].}
+
+ +Stop listening on every transport, and close every active connections +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method addTransport(s: Switch; t: Transport) {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method connect(s: Switch; address: MultiAddress; allowUnknownPeerId = false): Future[
+    PeerId] {....raises: [], tags: [], forbids: [].}
+
+ +

Connects to a peer and retrieve its PeerId

+

If the P2P part is missing from the MA and allowUnknownPeerId is set to true, this will discover the PeerId while connecting. This exposes you to MiTM attacks, so it shouldn't be used without care!

+ +Source   +Edit   + +
+
+
+
method connect(s: Switch; peerId: PeerId; addrs: seq[MultiAddress];
+               forceDial = false; reuseConnection = true;
+               upgradeDir = Direction.Out): Future[void] {.public, ...raises: [],
+    tags: [], forbids: [].}
+
+ +Connects to a peer without opening a stream to it +Source   +Edit   + +
+
+ +
+
+
+
method dial(s: Switch; peerId: PeerId; addrs: seq[MultiAddress];
+            protos: seq[string]; forceDial = false): Future[Connection] {.
+    public, ...raises: [], tags: [], forbids: [].}
+
+ +Connected to a peer and open a stream with the specified protos +Source   +Edit   + +
+
+
+
method dial(s: Switch; peerId: PeerId; protos: seq[string]): Future[Connection] {.
+    public, ...raises: [], tags: [], forbids: [].}
+
+ +Open a stream to a connected peer with the specified protos +Source   +Edit   + +
+
+ +
+
+
+
method run(self: Service; switch: Switch) {.base, async, ...gcsafe, raises: [],
+    tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method setup(self: Service; switch: Switch): Future[bool] {.base, async, ...gcsafe,
+    raises: [], tags: [TimeEffect, WriteIOEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
method stop(self: Service; switch: Switch): Future[bool] {.base, async, ...gcsafe,
+    raises: [], tags: [TimeEffect, WriteIOEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ PeerEventHandler, PeerEvent, TooManyConnectionsError, MaxConnectionsPerPeer, ConnEventKind, ConnManager, connectedPeers, getConnections, AlreadyExpectingConnectionError, ConnEvent, connCount, ConnEventHandler, new, addConnEventHandler, PeerEventKind, triggerConnEvent, removeConnEventHandler, MaxConnections, ConnectionSlot, newLPStreamWriteError, DNS_OR_IP, ProtoHeader, AlreadyExpectingConnectionError, shortLog, random, new, UDP_DNS, $, getProtoHeader, MaxConnectionsPerPeer, ephemeral, MaPatternOp, ==, WS_DNS, initVBuffer, <=, MaxSizeError, ProtoFlags, ==, getLen, maxIncomingStreams, ECDHEScheme, shortLog, init, closed, addConnEventHandler, finish, [], init, new, macOpenArray, random, init, new, Secret, peekVarint, random, handshake, MaxConnections, $, validate, mapOr, MaError, init, bytes, UpgradeFailedError, IdentityInvalidMsgError, maxInlineKeyLength, TranscoderDNS, QUIC, ProtoVersion, [], init, withValue, getRequiredField, getField, writeLp, removeConnEventHandler, WS_IP, write, public, MAKind, write, write, getField, checkFieldNumber, init, codec, getRepeatedField, matchPartial, addObservation, IdentityNoMatchError, libp2p_pki_schemes, push, getBytes, len, &, init, readLp, HTTP, initVBuffer, atEof, LPStreamTrackerName, guessDialableAddr, write, toOpt, fullAddrs, payloadType, getProtoHeader, LPStreamError, init, $, IP, protoAddress, newRng, IdentifyPushCodec, SecureConn, checkValid, getPublicKey, CircuitRelay, decodeProposal, WebSockets, libp2p_failed_upgrades_incoming, exceptionToAssert, extractPublicKey, mapAnd, UDP_IP, new, newLPStreamEOFError, init, connCount, write, DNSADDR, LPError, AddressMapper, IdentifyPushHandler, DNS4, write, new, WSS, TCP_IP, hash, writePacked, init, closeImpl, Identify, readSeq, toBytes, TCP_DNS, shortLog, encode, len, capLen, init, protoName, protoArgument, PeerEventHandler, LPProtoHandler, secure, toRawBytes, IdentifyPush, MaPattern, TranscoderIP6Zone, $, initProtoBuffer, newLPStreamReadError, init, WSS_DNS, match, <, CryptoResult, parseFullAddress, ProtoResult, WebRTCDirect, init, upgrade, UDP, PeerInfo, TranscoderOnion, StreamTracker, IdentifyNoPubKeyError, write, init, finish, LPStreamResetError, isEmpty, writeArray, writeLp, getRawBytes, new, LPStreamIncompleteError, PeerId, LPStreamEOFError, maxIncomingStreams=, IP6, shortLog, new, decode, initVBuffer, PKScheme, new, toString, payload, triggerConnEvent, init, write, init, valueOr, TCP, PrivateKey, getBytes, start, write, init, &=, PeerInfoError, newLPStreamClosedError, random, compilesOr, init, initProtoBuffer, toException, DNS, init, Upgrade, goffset, HandlerHolder, >, SecureConnTrackerName, KeyPair, init, high, mac, cmp, SupportedWireTypes, formatItIMPL, formatItIMPL, initStream, formatItIMPL, Signature, formatItIMPL, toBytes, IPFS, getField, shortLog, readOnce, init, secure, isEmpty, ConnEventKind, MultiAddress, ProtoScalar, shortLog, Connection, LPStreamIncorrectDefect, hex, expandItIMPL, protocols, codec=, DefaultMaxIncomingStreams, HTTPS, UNIX, tryAndWarn, hash, TooManyConnectionsError, ConnectionSlot, getPtr, getBytes, TLS_WS, TranscoderIP6, encode, TranscoderIP4, formatItIMPL, PeerEvent, supported, MaResult, ProtoField, IdentifyCodec, toBytes, writeSeq, DigestSheme, ConnEvent, init, ==, $, DNS6, [], IpTransportProtocol, toOpenArray, init, allFuturesThrowing, IP4, TranscoderPort, isEnough, safeConvert, getField, createExchange, >=, init, ephemeral, payloadDomain, $, withValue, init, init, LPStreamLimitError, TranscoderOnion3, SignedPayload, closeImpl, toBytes, Secure, newLPStreamLimitError, newLPStreamIncorrectDefect, keyOpenArray, match, WebSockets_DNS, $, isEmpty, LPStreamReadError, connectedPeers, new, getRequiredRepeatedField, init, newLPStreamIncompleteError, newLPStreamReadError, initProtoBuffer, MAProtocol, newLPStreamResetError, decode, getPackedRepeatedField, initStream, contains, init, getField, shortLog, getWrapped, readArray, selectBest, peekSeq, P2PPattern, getWrapped, Envelope, hasPublicKey, toException, init, isEnough, init, getConnections, Reliable, init, addrs, hex, WS, AgentVersion, init, MultistreamSelect, encode, LPProtocol, DNSANY, TimeoutHandler, match, getField, writeLPVarint, iv, DefaultConnectionTimeout, readLine, Eof, CryptoError, getField, append, init, parseFullAddress, WSS_IP, LPStreamConnDownError, PeerRecord, init, decodeExchange, SupportedSchemes, getRepeatedField, LPStreamWriteError, getField, select, Unreliable, SupportedSchemesInt, random, checkFutures, shuffle, init, validate, Matcher, mapEq, getField, stretchKeys, Onion3, write, TcpOnion3, identify, select, concat, TranscoderP2P, AddressInfo, ConnectionTrackerName, sign, ConnManager, write, EnvelopeError, LPStream, verify, IdentifyInfo, IdentifyError, encode, len, newLPStreamRemoteClosedError, createProposal, MaPatResult, Direction, ProtoBuffer, readMessage, key, InvalidVarintError, decode, shortLog, ==, write, getBytes, write, init, UTP, readVarint, peekArray, hash, data, init, getMostObservedProtosAndPorts, init, ObservedAddrManager, PublicKey, ConnEventHandler, WebSockets_IP, decodeMsg, VBuffer, update, writePBVarint, ProtoFieldKind, readExactly, protoArgument, getRepeatedField, ProtoError, newLPStreamConnDownError, init, initStream, readVarint, ivOpenArray, PeerEventKind, orError, vsizeof, getField, LPStreamRemoteClosedError, setupStreamTracker, libp2p_failed_upgrades_outgoing, MultiStreamError, protoCode, MaInvalidAddress, select, LPStreamClosedError, RsaDefaultKeySize, writeVarint, items, write, getOrder, TranscoderUnix, SignedPeerRecord, init, stop, join, dial, connect, checkFutures, tryAndWarn, LPError, addTransport, toException, dial, allFuturesThrowing, Dialer, DialFailedError, Dial, connect, toException, tryDial, PeerBook, ProtoBook, []=, PeerBookChangeHandler, KeyBook, AgentBook, new, cleanup, identify, SeqPeerBook, getMostObservedProtosAndPorts, contains, PeerStore, len, AddressBook, ProtoVersionBook, addHandler, guessDialableAddr, SPRBook, del, updatePeerInfo, del, [], [] +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/transcoder.html b/traffic-score-tests/libp2p/transcoder.html new file mode 100644 index 000000000..6504ad522 --- /dev/null +++ b/traffic-score-tests/libp2p/transcoder.html @@ -0,0 +1,222 @@ + + + + + + + +libp2p/transcoder + + + + + + + + + + + + +
+
+

libp2p/transcoder

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements transcoder interface.

+
+

Imports

+
+ vbuffer +
+
+
+

Types

+
+
+
Transcoder = object
+  stringToBuffer*: proc (s: string; vb: var VBuffer): bool {.nimcall, ...gcsafe,
+      noSideEffect, ...raises: [].}
+  bufferToString*: proc (vb: var VBuffer; s: var string): bool {.nimcall,
+      ...gcsafe, noSideEffect, ...raises: [].}
+  validateBuffer*: proc (vb: var VBuffer): bool {.nimcall, ...gcsafe, noSideEffect,
+      ...raises: [].}
+
+
+ + +Source   +Edit   + +
+
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/transports/tcptransport.html b/traffic-score-tests/libp2p/transports/tcptransport.html new file mode 100644 index 000000000..ddcf6ae42 --- /dev/null +++ b/traffic-score-tests/libp2p/transports/tcptransport.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/transports/tcptransport + + + + + + + + + + + + +
+
+

libp2p/transports/tcptransport

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/transports/transport.html b/traffic-score-tests/libp2p/transports/transport.html new file mode 100644 index 000000000..c4c721f27 --- /dev/null +++ b/traffic-score-tests/libp2p/transports/transport.html @@ -0,0 +1,74 @@ + + + + + + + +libp2p/transports/transport + + + + + + + + + + + + +
+
+

libp2p/transports/transport

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ +
+
+ Source   +Edit   + +
+ +

+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/upgrademngrs/upgrade.html b/traffic-score-tests/libp2p/upgrademngrs/upgrade.html new file mode 100644 index 000000000..7f05afb12 --- /dev/null +++ b/traffic-score-tests/libp2p/upgrademngrs/upgrade.html @@ -0,0 +1,328 @@ + + + + + + + +libp2p/upgrademngrs/upgrade + + + + + + + + + + + + +
+
+

libp2p/upgrademngrs/upgrade

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+ +
+

Types

+
+
+
libp2p_failed_upgrades_incoming = IgnoredCollector
+
+ + +Source   +Edit   + +
+
+
+
libp2p_failed_upgrades_outgoing = IgnoredCollector
+
+ + +Source   +Edit   + +
+
+
+
Upgrade = ref object of RootObj
+  ms*: MultistreamSelect
+  connManager*: ConnManager
+  secureManagers*: seq[Secure]
+
+
+ + +Source   +Edit   + +
+
+
+
UpgradeFailedError = object of LPError
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc secure(self: Upgrade; conn: Connection; direction: Direction;
+            peerId: Opt[PeerId]): Future[Connection] {.async, ...gcsafe, gcsafe,
+    raises: [], tags: [RootEffect], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Methods

+
+
+
+
method upgrade(self: Upgrade; conn: Connection; direction: Direction;
+               peerId: Opt[PeerId]): Future[Muxer] {.base, ...gcsafe, raises: [],
+    tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Exports

+
+ PeerEventHandler, PeerEvent, TooManyConnectionsError, MaxConnectionsPerPeer, ConnEventKind, ConnManager, connectedPeers, getConnections, AlreadyExpectingConnectionError, ConnEvent, connCount, ConnEventHandler, new, addConnEventHandler, PeerEventKind, triggerConnEvent, removeConnEventHandler, MaxConnections, ConnectionSlot, newLPStreamWriteError, DNS_OR_IP, ProtoHeader, shortLog, init, random, UDP_DNS, $, getProtoHeader, MaError, ephemeral, MaPatternOp, WS_DNS, initVBuffer, getProtoHeader, MaxSizeError, ProtoFlags, getLen, ECDHEScheme, shortLog, init, init, closed, [], decode, macOpenArray, random, init, VBuffer, Secret, peekVarint, random, $, validate, mapOr, init, bytes, maxInlineKeyLength, TranscoderDNS, QUIC, [], key, ephemeral, withValue, getRequiredField, getField, init, writeLp, WS_IP, write, public, MAKind, write, DNSANY, getField, checkFieldNumber, valueOr, init, getRepeatedField, matchPartial, libp2p_pki_schemes, getBytes, len, ==, readVarint, readLp, HTTP, initVBuffer, mac, atEof, TcpOnion3, write, toOpt, fullAddrs, payloadType, <=, LPStreamError, init, IP, protoAddress, newRng, DefaultConnectionTimeout, ==, checkValid, getPublicKey, exceptionToAssert, decodeProposal, len, CircuitRelay, extractPublicKey, mapAnd, new, verify, UDP_IP, new, newLPStreamEOFError, init, ==, DNSADDR, AddressMapper, write, PeerId, WSS, LPStream, TCP_IP, hash, writePacked, init, readSeq, toBytes, TCP_DNS, shortLog, encode, len, capLen, init, protoName, toRawBytes, TranscoderIP6Zone, $, initProtoBuffer, newLPStreamReadError, init, WSS_DNS, match, writeLPVarint, CryptoResult, parseFullAddress, ProtoResult, WebRTCDirect, init, UDP, TranscoderOnion, StreamTracker, write, init, LPStreamResetError, isEmpty, writeArray, LPStreamReadError, decode, LPStreamIncompleteError, [], LPStreamEOFError, IP6, shortLog, initVBuffer, PKScheme, payload, init, init, Connection, write, init, TCP, PrivateKey, getBytes, newLPStreamIncorrectDefect, init, &=, PeerInfoError, newLPStreamClosedError, random, write, compilesOr, TranscoderIP4, init, initProtoBuffer, toException, DNS, UTP, goffset, readVarint, getRawBytes, >, KeyPair, init, init, high, toString, cmp, init, SupportedWireTypes, formatItIMPL, formatItIMPL, formatItIMPL, Signature, contains, hash, formatItIMPL, toBytes, DigestSheme, IPFS, getField, readOnce, init, isEmpty, ProtoScalar, shortLog, data, LPStreamIncorrectDefect, hex, protocols, finish, update, HTTPS, tryAndWarn, WebSockets, LPError, getPtr, write, TLS_WS, sign, finish, encode, MaResult, init, ProtoField, init, toBytes, writeSeq, init, &, DNS6, IpTransportProtocol, toOpenArray, allFuturesThrowing, IP4, TranscoderPort, isEnough, safeConvert, getField, init, createExchange, >=, init, payloadDomain, $, MaPattern, withValue, init, LPStreamLimitError, TranscoderOnion3, SignedPayload, closeImpl, toBytes, protoArgument, newLPStreamLimitError, write, keyOpenArray, match, createProposal, parseFullAddress, $, isEmpty, supported, getRequiredRepeatedField, init, newLPStreamIncompleteError, newLPStreamReadError, initProtoBuffer, MAProtocol, newLPStreamResetError, getPackedRepeatedField, initStream, getField, shortLog, DNS4, getWrapped, readArray, selectBest, write, P2PPattern, Envelope, hasPublicKey, toException, init, isEnough, init, Reliable, addrs, hex, ProtoBuffer, getBytes, WS, stretchKeys, encode, init, init, getField, getField, match, getField, <, iv, readLine, Eof, CryptoError, hash, append, vsizeof, init, WebSockets_DNS, WSS_IP, LPStreamConnDownError, peekArray, UNIX, PeerRecord, SupportedSchemes, getRepeatedField, LPStreamWriteError, Unreliable, SupportedSchemesInt, random, checkFutures, shuffle, validate, $, protoCode, mapEq, Onion3, write, LPStreamTrackerName, concat, TranscoderP2P, PeerInfo, AddressInfo, ConnectionTrackerName, TranscoderIP6, write, EnvelopeError, encode, newLPStreamRemoteClosedError, MaPatResult, Direction, InvalidVarintError, decode, shortLog, items, ==, init, peekSeq, getBytes, write, PublicKey, WebSockets_IP, writeLp, writePBVarint, ProtoFieldKind, readExactly, protoArgument, getRepeatedField, ProtoError, newLPStreamConnDownError, initStream, getField, MultiAddress, ivOpenArray, TimeoutHandler, orError, decodeExchange, getField, LPStreamRemoteClosedError, setupStreamTracker, MaInvalidAddress, LPStreamClosedError, RsaDefaultKeySize, write, getOrder, TranscoderUnix, SignedPeerRecord, join, writeVarint, getMostObservedProtosAndPorts, new, IdentifyPush, init, addObservation, IdentityInvalidMsgError, IdentifyCodec, new, new, Identify, IdentityNoMatchError, ProtoVersion, push, IdentifyError, IdentifyInfo, decodeMsg, $, expandItIMPL, init, identify, ObservedAddrManager, AgentVersion, IdentifyNoPubKeyError, IdentifyPushHandler, guessDialableAddr, IdentifyPushCodec, formatItIMPL, new, codec=, DefaultMaxIncomingStreams, LPProtoHandler, handshake, new, secure, init, readMessage, shortLog, init, maxIncomingStreams=, codec, closeImpl, maxIncomingStreams, getWrapped, start, initStream, SecureConn, SecureConnTrackerName, LPProtocol, stop, Secure, HandlerHolder, MultiStreamError, select, select, Matcher, new, select, MultistreamSelect +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/utility.html b/traffic-score-tests/libp2p/utility.html new file mode 100644 index 000000000..729677236 --- /dev/null +++ b/traffic-score-tests/libp2p/utility.html @@ -0,0 +1,399 @@ + + + + + + + +libp2p/utility + + + + + + + + + + + + +
+
+

libp2p/utility

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+
+

Procs

+
+
+
+
proc capLen[T](s: var seq[T]; length: Natural) {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
func shortLog(item: openArray[byte]): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+
+
func shortLog(item: string): string {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Macros

+
+
+
+
macro withValue[T](self: Opt[T] | Option[T]; value, body, body2: untyped): untyped {.
+    ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template compilesOr(a, b: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template exceptionToAssert(body: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template public() {.pragma.}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template safeConvert[T: SomeInteger; S: Ordinal](value: S): T
+
+ +Converts value from S to T iff value is guaranteed to be preserved. +Source   +Edit   + +
+
+ +
+
+
+
template toOpt[T, E](self: Result[T, E]): Opt[T]
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template valueOr[T](self: Option[T]; body: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
template withValue[T](self: Opt[T] | Option[T]; value, body: untyped): untyped
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/utils/semaphore.html b/traffic-score-tests/libp2p/utils/semaphore.html new file mode 100644 index 000000000..5ece78096 --- /dev/null +++ b/traffic-score-tests/libp2p/utils/semaphore.html @@ -0,0 +1,321 @@ + + + + + + + +libp2p/utils/semaphore + + + + + + + + + + + + +
+
+

libp2p/utils/semaphore

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

+
+

Types

+
+
+
AsyncSemaphore = ref object of RootObj
+  size*: int
+  
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc acquire(s: AsyncSemaphore): Future[void] {....raises: [], tags: [RootEffect],
+    forbids: [].}
+
+ +Acquire a resource and decrement the resource counter. If no more resources are available, the returned future will not complete until the resource count goes above 0. +Source   +Edit   + +
+
+ +
+
+
+
proc count(s: AsyncSemaphore): int {....raises: [], tags: [], forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc forceAcquire(s: AsyncSemaphore) {....raises: [], tags: [], forbids: [].}
+
+ +ForceAcquire will always succeed, creating a temporary slot if required. This temporary slot will stay usable until there is less acquires than releases +Source   +Edit   + +
+
+ +
+
+
+
proc newAsyncSemaphore(size: int): AsyncSemaphore {....raises: [], tags: [],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc release(s: AsyncSemaphore) {....raises: [], tags: [RootEffect], forbids: [].}
+
+ +Release a resource from the semaphore, by picking the first future from the queue and completing it and incrementing the internal resource count +Source   +Edit   + +
+
+ +
+
+
+
proc tryAcquire(s: AsyncSemaphore): bool {....raises: [], tags: [], forbids: [].}
+
+ +Attempts to acquire a resource, if successful returns true, otherwise false +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/varint.html b/traffic-score-tests/libp2p/varint.html new file mode 100644 index 000000000..413af5319 --- /dev/null +++ b/traffic-score-tests/libp2p/varint.html @@ -0,0 +1,635 @@ + + + + + + + +libp2p/varint + + + + + + + + + + + + +
+
+

libp2p/varint

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements Variable Integer VARINT. This module supports two variants of variable integer

+

+
+

Types

+
+
+
hint = distinct int
+
+ +Signed integer types which will be encoded using simple cast. +Source   +Edit   + +
+
+
+
hint32 = distinct int32
+
+ + +Source   +Edit   + +
+
+
+
hint64 = distinct int64
+
+ + +Source   +Edit   + +
+
+
+
LP = object
+  
+
+ +Use this type to specify LibP2P varint encoding +Source   +Edit   + +
+
+
+
LPSomeUVarint = uint | uint64 | uint32 | uint16 | uint8
+
+ + +Source   +Edit   + +
+
+
+
LPSomeVarint = LPSomeUVarint
+
+ + +Source   +Edit   + +
+
+
+
PB = object
+  
+
+ +Use this type to specify Google ProtoBuf's varint encoding +Source   +Edit   + +
+
+
+
PBSomeSVarint = hint | hint64 | hint32
+
+ + +Source   +Edit   + +
+
+
+
PBSomeUVarint = uint | uint64 | uint32
+
+ + +Source   +Edit   + +
+
+ +
+
PBZigVarint = zint | zint64 | zint32
+
+ + +Source   +Edit   + +
+
+
+
SomeUVarint = PBSomeUVarint | LPSomeUVarint
+
+ + +Source   +Edit   + +
+
+
+
SomeVarint = PBSomeVarint | LPSomeVarint
+
+ + +Source   +Edit   + +
+
+
+
VarintError {.pure.} = enum
+  Error, Overflow, Incomplete, Overlong, Overrun
+
+ + +Source   +Edit   + +
+
+
+
VarintResult[T] = Result[T, VarintError]
+
+ + +Source   +Edit   + +
+
+
+
zint = distinct int
+
+ +Signed integer types which will be encoded using zigzag encoding. +Source   +Edit   + +
+
+
+
zint32 = distinct int32
+
+ + +Source   +Edit   + +
+
+
+
zint64 = distinct int64
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc encodeVarint(vtype: typedesc[LP]; value: LPSomeVarint): VarintResult[
+    seq[byte]] {.inline, ...raises: [].}
+
+ +Encode integer to LibP2P unsigned varint and returns sequence of bytes as buffer. +Source   +Edit   + +
+
+
+
proc encodeVarint(vtype: typedesc[PB]; value: PBSomeVarint): VarintResult[
+    seq[byte]] {.inline, ...raises: [].}
+
+ +Encode integer to Google ProtoBuf's signed/unsigned varint and returns sequence of bytes as buffer. +Source   +Edit   + +
+
+ +
+
+
+
proc getSVarint(pbytes: openArray[byte]; outsize: var int;
+                outval: var (PBZigVarint | PBSomeSVarint)): VarintResult[void] {.
+    inline, ...raises: [].}
+
+ +

Decode signed integer (int32 or int64) from buffer pbytes and store it to outval.

+

On success outlen will be set to number of bytes processed while decoding signed varint.

+

If array pbytes is empty, Incomplete error will be returned.

+

If there not enough bytes available in array pbytes to decode signed varint, Incomplete error will be returned.

+

If encoded value can produce integer overflow, Overflow error will be returned.

+

Note, when decoding 10th byte of 64bit integer only 1 bit from byte will be decoded, all other bits will be ignored. When decoding 5th byte of 32bit integer only 4 bits from byte will be decoded, all other bits will be ignored.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc getUVarint[T: PB | LP](vtype: typedesc[T]; pbytes: openArray[byte];
+                            outlen: var int; outval: var SomeUVarint): VarintResult[
+    void] {....raises: [].}
+
+ +

Decode unsigned varint from buffer pbytes and store it to outval. On success outlen will be set to number of bytes processed while decoding unsigned varint.

+

If array pbytes is empty, Incomplete error will be returned.

+

If there not enough bytes available in array pbytes to decode unsigned varint, Incomplete error will be returned.

+

If encoded value can produce integer overflow, Overflow error will be returned.

+

Google ProtoBuf When decoding 10th byte of Google Protobuf's 64bit integer only 1 bit from byte will be decoded, all other bits will be ignored. When decoding 5th byte of 32bit integer only 4 bits from byte will be decoded, all other bits will be ignored.

+

LibP2P When decoding 5th byte of 32bit integer only 4 bits from byte will be decoded, all other bits will be ignored.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc getVarint[T: PB | LP](vtype: typedesc[T]; pbytes: openArray[byte];
+                           nbytes: var int; value: var SomeVarint): VarintResult[
+    void] {.inline, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc putSVarint(pbytes: var openArray[byte]; outsize: var int;
+                outval: (PBZigVarint | PBSomeSVarint)): VarintResult[void] {.
+    inline, ...raises: [].}
+
+ +

Encode signed integer outval using ProtoBuffer's zigzag encoding (sint32 or sint64) and store it to array pbytes.

+

On success outlen will hold number of bytes (octets) used to encode unsigned integer v.

+

If there not enough bytes available in buffer pbytes, Incomplete error will be returned and outlen will be set to number of bytes required.

+

Maximum encoded length of 64bit integer is 10 octets. Maximum encoded length of 32bit integer is 5 octets.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc putUVarint[T: PB | LP](vtype: typedesc[T]; pbytes: var openArray[byte];
+                            outlen: var int; outval: SomeUVarint): VarintResult[
+    void] {....raises: [].}
+
+ +

Encode unsigned varint outval and store it to array pbytes.

+

On success outlen will hold number of bytes (octets) used to encode unsigned integer v.

+

If there not enough bytes available in buffer pbytes, Incomplete error will be returned and outlen will be set to number of bytes required.

+

Google ProtoBuf Maximum encoded length of 64bit integer is 10 octets. Maximum encoded length of 32bit integer is 5 octets.

+

LibP2P Maximum encoded length of 63bit integer is 9 octets. Maximum encoded length of 32bit integer is 5 octets.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc putVarint[T: PB | LP](vtype: typedesc[T]; pbytes: var openArray[byte];
+                           nbytes: var int; value: SomeVarint): VarintResult[
+    void] {.inline, ...raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+
+
+
proc vsizeof(x: SomeVarint): int {.inline, ...raises: [].}
+
+ +Returns number of bytes required to encode integer x as varint. +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template toBytes(vtype: typedesc[PB]; value: PBSomeVarint): auto
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/vbuffer.html b/traffic-score-tests/libp2p/vbuffer.html new file mode 100644 index 000000000..2f3279cf9 --- /dev/null +++ b/traffic-score-tests/libp2p/vbuffer.html @@ -0,0 +1,593 @@ + + + + + + + +libp2p/vbuffer + + + + + + + + + + + + +
+
+

libp2p/vbuffer

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements variable buffer.

+
+

Imports

+
+ varint +
+
+
+

Types

+
+
+
VBuffer = object
+  buffer*: seq[byte]
+  offset*: int
+
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc `$`(vb: VBuffer): string {....raises: [], tags: [], forbids: [].}
+
+ +Return hexadecimal string representation of buffer vb. +Source   +Edit   + +
+
+ +
+
+
+
proc finish(vb: var VBuffer) {....raises: [], tags: [], forbids: [].}
+
+ +Finishes vb. +Source   +Edit   + +
+
+ +
+
+
+
proc high(vb: VBuffer): int {....raises: [], tags: [], forbids: [].}
+
+ +Returns number of bytes left in buffer vb. +Source   +Edit   + +
+
+ +
+
+
+
proc initVBuffer(): VBuffer {....raises: [], tags: [], forbids: [].}
+
+ +Initialize empty VBuffer. +Source   +Edit   + +
+
+
+
proc initVBuffer(data: openArray[byte]; offset = 0): VBuffer {....raises: [],
+    tags: [], forbids: [].}
+
+ +Initialize VBuffer with copy of data. +Source   +Edit   + +
+
+
+
proc initVBuffer(data: seq[byte]; offset = 0): VBuffer {....raises: [], tags: [],
+    forbids: [].}
+
+ +Initialize VBuffer with shallow copy of data. +Source   +Edit   + +
+
+ +
+
+
+
proc len(vb: VBuffer): int {....raises: [], tags: [], forbids: [].}
+
+ +Returns number of bytes left in buffer vb. +Source   +Edit   + +
+
+ +
+
+
+
proc peekArray[T: char | byte](vb: var VBuffer; value: var openArray[T]): int {.
+    ...raises: [].}
+
+ +

Peek array from buffer vb and store result to value.

+

This procedure will not adjust internal offset.

+

Returns number of bytes peeked from vb or -1 on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc peekSeq[T: string | seq[byte]](vb: var VBuffer; value: var T): int {.
+    ...raises: [].}
+
+ +

Peek length prefixed array from buffer vb and store result to value.

+

This procedure will not adjust internal offset.

+

Returns number of bytes peeked from vb or -1 on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc peekVarint(vb: var VBuffer; value: var LPSomeUVarint): int {....raises: [].}
+
+ +

Peek unsigned integer from buffer vb and store result to value.

+

This procedure will not adjust internal offset.

+

Returns number of bytes peeked from vb or -1 on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc readArray[T: char | byte](vb: var VBuffer; value: var openArray[T]): int {.
+    inline, ...raises: [].}
+
+ +

Read array from buffer vb and store result to value.

+

Returns number of bytes consumed from vb or -1 on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc readSeq[T: string | seq[byte]](vb: var VBuffer; value: var T): int {.
+    inline, ...raises: [].}
+
+ +

Read length prefixed array from buffer vb and store result to value.

+

Returns number of bytes consumed from vb or -1 on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc readVarint(vb: var VBuffer; value: var LPSomeUVarint): int {.inline,
+    ...raises: [].}
+
+ +

Read unsigned integer from buffer vb and store result to value.

+

Returns number of bytes consumed from vb or -1 on error.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc writeArray[T: byte | char](vb: var VBuffer; value: openArray[T]) {.
+    ...raises: [].}
+
+ +Write array value to buffer vb, value will NOT be prefixed with varint length of the array. +Source   +Edit   + +
+
+ +
+
+
+
proc writeLPVarint(vb: var VBuffer; value: LPSomeUVarint) {....raises: [].}
+
+ +Write value as variable unsigned integer. +Source   +Edit   + +
+
+ +
+
+
+
proc writePBVarint(vb: var VBuffer; value: PBSomeUVarint) {....raises: [].}
+
+ +Write value as variable unsigned integer. +Source   +Edit   + +
+
+ +
+
+
+
proc writeSeq[T: byte | char](vb: var VBuffer; value: openArray[T]) {....raises: [].}
+
+ +Write array value to buffer vb, value will be prefixed with varint length of the array. +Source   +Edit   + +
+
+ +
+
+
+
proc writeVarint(vb: var VBuffer; value: LPSomeUVarint) {....raises: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+
+

Templates

+
+
+
+
template isEmpty(vb: VBuffer): bool
+
+ +Returns true if buffer vb is empty. +Source   +Edit   + +
+
+ +
+
+
+
template isEnough(vb: VBuffer; length: int): bool
+
+ +Returns true if buffer vb holds at least length bytes. +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/libp2p/wire.html b/traffic-score-tests/libp2p/wire.html new file mode 100644 index 000000000..7358d24cf --- /dev/null +++ b/traffic-score-tests/libp2p/wire.html @@ -0,0 +1,559 @@ + + + + + + + +libp2p/wire + + + + + + + + + + + + +
+
+

libp2p/wire

+
+
+
+ + +
+ +
+ Search: +
+
+ Group by: + +
+ + + +
+
+ Source   +Edit   + +
+ +

This module implements wire network connection procedures.

+ +
+

Consts

+
+
+
RTRANSPMA = (operator: Or, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0),
+                          (operator: Eq, args: [], value: 477)], value: 0), (
+    operator: And, args: [(operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 53),
+                         (operator: Eq, args: [], value: 54),
+                         (operator: Eq, args: [], value: 55),
+                         (operator: Eq, args: [], value: 56)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)], value: 0),
+                                  (operator: Eq, args: [], value: 400)],
+             value: 0)
+
+ + +Source   +Edit   + +
+
+
+
TRANSPMA = (operator: Or, args: [(operator: Or, args: [(operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 6)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 6)],
+                value: 0)], value: 0), (operator: Or, args: [(operator: And, args: [(
+    operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0),
+    (operator: Eq, args: [], value: 477)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+    value: 0), (operator: Eq, args: [], value: 6)], value: 0), (operator: And, args: [(
+    operator: Or, args: [(operator: Eq, args: [], value: 4),
+                         (operator: Eq, args: [], value: 41)], value: 0),
+    (operator: Eq, args: [], value: 6)], value: 0)], value: 0), (operator: Or, args: [
+    (operator: Eq, args: [], value: 478), (operator: And, args: [
+    (operator: Eq, args: [], value: 448), (operator: Eq, args: [], value: 477)],
+    value: 0)], value: 0)], value: 0)], value: 0),
+    (operator: Eq, args: [], value: 400)], value: 0), (operator: Or, args: [(
+    operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 53), (operator: Eq, args: [], value: 54),
+    (operator: Eq, args: [], value: 55), (operator: Eq, args: [], value: 56)],
+                           value: 0), (operator: Eq, args: [], value: 273)],
+    value: 0), (operator: And, args: [(operator: Or, args: [
+    (operator: Eq, args: [], value: 4), (operator: Eq, args: [], value: 41)],
+                                       value: 0),
+                                      (operator: Eq, args: [], value: 273)],
+                value: 0)], value: 0)], value: 0)
+
+ + +Source   +Edit   + +
+
+ +
+
+
+

Procs

+
+
+
+
proc bindAsyncSocket(sock: AsyncFD; ma: MultiAddress): bool {....raises: [LPError],
+    raises: [], tags: [RootEffect], forbids: [].}
+
+ +

Bind socket sock to MultiAddress ma.

+

Note: This procedure only used in go-libp2p-daemon wrapper.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc connect(ma: MultiAddress; bufferSize = DefaultStreamBufferSize;
+             child: StreamTransport = nil; flags = default(set[SocketFlags]);
+             localAddress: Opt[MultiAddress] = Opt.none(MultiAddress)): Future[
+    StreamTransport] {....raises: [LPError, MaInvalidAddress], raises: [],
+                       tags: [RootEffect], forbids: [].}
+
+ +Open new connection to remote peer with address ma and create new transport object StreamTransport for established connection. bufferSize is size of internal buffer for transport. +Source   +Edit   + +
+
+ +
+
+
+
proc createAsyncSocket(ma: MultiAddress): AsyncFD {.
+    ...raises: [ValueError, LPError], raises: [], tags: [RootEffect], forbids: [].}
+
+ +

Create new asynchronous socket using MultiAddress' ma socket type and protocol information.

+

Returns asyncInvalidSocket on error.

+

Note: This procedure only used in go-libp2p-daemon wrapper.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc createStreamServer[T](ma: MultiAddress; cbproc: StreamCallback;
+                           flags: set[ServerFlags] = {}; udata: ref T;
+                           sock: AsyncFD = asyncInvalidSocket;
+                           backlog: int = 100;
+                           bufferSize: int = DefaultStreamBufferSize;
+                           child: StreamServer = nil;
+                           init: TransportInitCallback = nil): StreamServer {.
+    ...raises: [LPError, MaInvalidAddress], raises: [].}
+
+ +Create new TCP stream server which bounds to ma address. +Source   +Edit   + +
+
+
+
proc createStreamServer[T](ma: MultiAddress; flags: set[ServerFlags] = {};
+                           udata: ref T; sock: AsyncFD = asyncInvalidSocket;
+                           backlog: int = 100;
+                           bufferSize: int = DefaultStreamBufferSize;
+                           child: StreamServer = nil;
+                           init: TransportInitCallback = nil): StreamServer {.
+    ...raises: [LPError, MaInvalidAddress], raises: [].}
+
+ +Create new TCP stream server which bounds to ma address. +Source   +Edit   + +
+
+ +
+
+
+
proc getLocalAddress(sock: AsyncFD): TransportAddress {....raises: [], tags: [],
+    forbids: [].}
+
+ +

Retrieve local socket sock address.

+

Note: This procedure only used in go-libp2p-daemon wrapper.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc initTAddress(ma: MultiAddress): MaResult[TransportAddress] {....raises: [],
+    tags: [RootEffect], forbids: [].}
+
+ +

Initialize TransportAddress with MultiAddress ma.

+

MultiAddress must be wire address, e.g. {IP4, IP6, UNIX}/{TCP, UDP}.

+ +Source   +Edit   + +
+
+ +
+
+
+
proc isPublicMA(ma: MultiAddress): bool {....raises: [], tags: [RootEffect],
+    forbids: [].}
+
+ + +Source   +Edit   + +
+
+ +
+ +
+
+ +
+
+ + +
+
+ + + + + + diff --git a/traffic-score-tests/nimdoc.out.css b/traffic-score-tests/nimdoc.out.css new file mode 100644 index 000000000..1417d9eff --- /dev/null +++ b/traffic-score-tests/nimdoc.out.css @@ -0,0 +1,1026 @@ +/* +Stylesheet for use with Docutils/rst2html. + +See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to +customize this style sheet. + +Modified from Chad Skeeters' rst2html-style +https://bitbucket.org/cskeeters/rst2html-style/ + +Modified by Boyd Greenfield and narimiran +*/ + +:root { + --primary-background: #fff; + --secondary-background: ghostwhite; + --third-background: #e8e8e8; + --info-background: #50c050; + --warning-background: #c0a000; + --error-background: #e04040; + --border: #dde; + --text: #222; + --anchor: #07b; + --anchor-focus: #607c9f; + --input-focus: #1fa0eb; + --strong: #3c3c3c; + --hint: #9A9A9A; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN4AAAA9CAYAAADCt9ebAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjAzOjQ4KzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMjoyODo0MSswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMjoyODo0MSswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozMzM0ZjAxYS0yMDExLWE1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"); + + --keyword: #5e8f60; + --identifier: #222; + --comment: #484a86; + --operator: #155da4; + --punctuation: black; + --other: black; + --escapeSequence: #c4891b; + --number: #252dbe; + --literal: #a4255b; + --program: #6060c0; + --option: #508000; + --raw-data: #a4255b; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: black' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: black' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal) +} + +[data-theme="dark"] { + --primary-background: #171921; + --secondary-background: #1e202a; + --third-background: #2b2e3b; + --info-background: #008000; + --warning-background: #807000; + --error-background: #c03000; + --border: #0e1014; + --text: #fff; + --anchor: #8be9fd; + --anchor-focus: #8be9fd; + --input-focus: #8be9fd; + --strong: #bd93f9; + --hint: #7A7C85; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABMCAYAAABOBlMuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjE4OjIyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQy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"); + + --keyword: #ff79c6; + --identifier: #f8f8f2; + --comment: #6272a4; + --operator: #ff79c6; + --punctuation: #f8f8f2; + --other: #f8f8f2; + --escapeSequence: #bd93f9; + --number: #bd93f9; + --literal: #f1fa8c; + --program: #9090c0; + --option: #90b010; + --raw-data: #8be9fd; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal); +} + +@media (prefers-color-scheme: dark) { + [data-theme="auto"] { + --primary-background: #171921; + --secondary-background: #1e202a; + --third-background: #2b2e3b; + --info-background: #008000; + --warning-background: #807000; + --error-background: #c03000; + --border: #0e1014; + --text: #fff; + --anchor: #8be9fd; + --anchor-focus: #8be9fd; + --input-focus: #8be9fd; + --strong: #bd93f9; + --hint: #7A7C85; + --nim-sprite-base64: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABMCAYAAABOBlMuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFFmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTEyLTAzVDAxOjE4OjIyKzAxOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0xMi0wM1QwMToyMDoxMCswMTowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQyNDQtYTExZi0yMjc5YmY4NDNhYTAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ZWRlYjM1NzAtYjZmYy1kMjQ0LWExMWYtMjI3OWJmODQzYWEwIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZWRlYjM1NzAtYjZmYy1kMjQ0LWExMWYtMjI3OWJmODQzYWEwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplZGViMzU3MC1iNmZjLWQyNDQtYTExZi0yMjc5YmY4NDNhYTAiIHN0RXZ0OndoZW49IjIwMTktMTItMDNUMDE6MTg6MjIrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMS4wIChXaW5kb3dzKSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4JZNR8AAAfG0lEQVR4nO2deViTZ7r/7yxkJaxJ2MK+GCBAMCwS1kgUFQSKK4XWWqsz1jpjp3b0tDP1V+eqU391fqfT/mpPPd20drTFDS0KFEVWJSGAEgLIZpAICBJACIRs549Rj1WILAkBfD/XlevySp68z/0S3+/7vPdzLyidTgcLkU2bd+z39/f/q1gshsrKSoJELFCa2iaEuU9K6kb+8uXxv54/fzE8L/eswNT2zCfQpjbAGKS8lPFKSEjIXiaTCSEhIeDj4xNnapsQ5j6rktZGp6UlfxIdzQVzCplmanvmG1hTG2BIAtlc26CgoDfT0tL2e3l5AQCAjY0NkMnk/a9s2k6rrKw8UV8n1JjYTIQ5RlAw14KzmL3xze1vfJyUuMJaq9UCFovFm9qu+YbBxcSPFUYkk8l2Q0NDsvo6ocrQx5+I8Ih4bz6f/0l8fHyKlZXV4/dRKBQwmcwwMpn8A4FAoPgHhH9bV1sxa488wZxoaycnJ/a9e/duCa5fkc3WvAiTI4Ib77p+XdqHG9anbfLy8gAAgLGxMdBpF+bjvzExqJj4scKI0dHRnwQHB++orq7+AgDeMuTxJ2Jl4rqU9PT0EwEBAUQCgTDuGAaDAampqYepVKpHUHDk325Ulw0a266YuFW+Gzdu/MDPz29jfn7+XgA4aOw5ESZP6kvpCXv3vnM8NiaSamVl+fj9BepGNDoGFRN7e/slcXFxO1xcXMDJyWnH7j//H/fi4uJdgutXmgw5z5O8smn7X9euXbvf29sbMBjMhONQKBRYWVlBbGzsbjMzM3JoOG+/sKKwy1h2rd/4elpGRsYuLy+vaDweD2w2Oy1h5ZrCvEunEaeeiVnMiabyl/F2/+X9P+8JDPQHHA5napMWBAYTk6DgSNuEhIS9DAYDAP7tq1i6dOkqOp3OWbNu0wens44emeoxA9lcWwKBYEMkEm2JRKIdHo+3QKFQWJ1Op8ZgMER3d/dVq1evTnFycpr0MSkUCsTExGzH4/Gk1LTME/39/TI0Go1FoVCg1WrVY2NjipGRkcGRkRH5dPwrEZHLXMPCwjJSUlIy3dzcfB+97+rqGhYSEpIOAIiYmBguN3zL77dt3uPh4W5qUxYUBhMTb2/vjeHh4cvR6P/dILK0tITIyEg7BweHr363/Z3Ampqaf1Zcu/zMKiVsyVJvMplsRyKR7IhEor2FhYUbhUJhJCYm2pFIJB6JRAIymQx4PB7QaDRoNBowMzMDJycnwOOn7icjEokQGxu7icFgbLp///7jFY1WqwWlUgkjIyOgUCgO7Ni5Rz48PCwfHh7uGRkZeaBQKOSjo6ODCoVCXlNVKn/6uCsT13FXrVr1emho6BYKhfLMnP7+/omrU9LPX8g+UThloxEMxqJFXjxESAyPQcSEExrLWLNmzW57e/txP/fw8ABHR8cdDAaDt3xF2ru9vb03sVgs0cbGxs/FxWVZUlISj0aj+dna2oKtrS1M5PcwJCgUCry8vODRrs84vPfoH6OjoyCXy6Gvr+/R6+CWrX9s7evrk/b19bWr1Wqli4sLZ8OGDe95eXmxUSjUuAd0cHDwjoqK2sYKXFIhvnldYYTTQpgU4/8+jyASCYDGoCd+ZkYYF8OICYezl8PhuOkbQyAQIDo62s/NzS2np6cHbGxsgEajAYFAAAwGA1gsFia6CE0NgUAABwcHsLe3B61WC2q1eo9WqwWNRgNKpRLUajUQiUSgUCh6zwGHwwGTydzo5+eXBQBnZu8MEJ5keHhYPqyYWMtHR0ZBpVIhYj9FUDONgOUvT12+du3avMDAQJjssdRqNWCxCyrEZdLodDoQi8Ulx44de628NL/V1Pa8iERE8l2dHB2CJvpcq9Nqbt1qKURWj1Njxld0ZGTkAW9v70kLCQC8sEIC8O/HKx8fn2gmk8kHgCk7pRFmzrWyAikASE1tx0Jj2uH0EZHL/N7YtuvT4OBgzmz4OBYSeDweIiMjt2S++vtMP1YYEmmJsCCY8mNOIJtr6+zsHBcZGXmIw+G4mZubG8m0hU9HRwcUFxe/KxQKTyDRsQjznSmJCS9+dVRERMTfQ0NDo2xtbfUGiSFMjtHRUaitrc3Jzc09kHvxVLmp7UFAmC6oZQkvrZLL5RJhReHtiQb5scKIXC7371FRUX90dnYGIpE4JR8Jgn40Gg20t7fXFxYWfnr9+vWjz8sdYi+Osh4vzgUBwZSgtu94V+fs7Hx7YGCgra6u7khLS0u2RCwYeTQgKmYFh8fj/f/g4OAldnZ2prR1wdPd3Q1CofBQSUnJkdLi3N8E93FCY6k+Pj48FxcXjlar1ZSWlh65VvYr4kREmDNg79+/D3FxcW5OTk5uXl5evNbW1tL0jK3ZXV1d1ykUintycvInoaGhdkj+gvGxs7MDPp+/m0AgWMQvS/lyeHhYTqPRPJycnIJSU1NZ3t7eW2g0Gly/fv2oWq1Gij0hzClQ/gHhpLS0tEM8Hm/7I8Ho7++HlpYWsLa2Bg8PDxOb+OKhUCigqakJ7t+/D25ubuDu7g4oFAp0Oh08ePAAvv7666TTWUdzTG0nAsKTYMU3ryuSU18+4+bmFrZo0SIOAICVlRUsXrx4zkakLnRIJBI8CgJ8MtdJp9NBZ2enqL29XWRC8xAQxgUNAHD+3L8KGhoaCp78ABES04JCoX4jJAAAAwMDUFtbe96YpRMQEKbL41DU5ubmko6Ojj2PSgggzD36+/vrb9y4cX425zzw93/8EBjon2is44+NjSkePBjqGRwc7G5v7xBV19w8U5B/3qgrr9+/uWtXUuKKD/TZ9MXh/066/OuFmunO8dGBQ98HBbGSp/t9U6LRaDXK0dHBoeFhuVzeL22/0yFqamopufjLqRJ933ssJi0tLSXV1dWHGAzGbuObOzs8ubqa71vZKpUKOjo6blwpOF8zm/Mu5cVkLlkSaswprAHAaVihgK7O7oSGxltvfXLon3nXK4RHT2cdN4pfKDCAlZyUuMJan02nTmczAaBmunPw4qI3cbnh0/36XICq0+lgcPABp7OrK629vUP5z8++LLh2XXD05L++yxrvC4/F5EZ12WBS8saLS5Ys2U2lUufUY45SqQSlUgkqlQrUavXj19jYGGg0GtBoNKDT6UCn05VotVq1TqfToFAojFar1eh0Og0Wi8XhcDgeGo1+/PhgZmYGOBwOsFgsmJmZ/eY1F+nt7YXa2trs2Z73wdCQBgCMHp1IJpHA09MdPD3dLRIS+OtKisvWvbP7vf2lZdePVFwzbHTwyMiI3hidkZFRUKvUYzOZ48HQkBIA5nWqBAqFAktLC7C0tADmIh88Pz4uMSyUk7hn776DV4tKPn/6d/lNxp1MJqsRCASf8vn8XdMpOjRTVCoVjI2NgUqlAq1WCyMjI9DX1wf379+Hvr6+/Q8ePOgdGRmRKxSKx0WLFAqFXKlUKnQ6nUar1arHq47mxwrD4/F4Eg6HI2GxWDwej7cgkUjWFAqFam5uTjU3N6eRyeQPLSwswNraGqysrIBAIDwWFywW+zja11Qi29LSclIikeSZZPJZBovBAI8XA8HBQR9kZZ3lR8cmvFZSlGe00p8IkwONRkNERBj4+i7a4+XpHv307/IbMakWlciXJbx0nMPh7Jqo0JGh0el0MDo6Cl1dXSCVSkEmk7177969W319fe1DQ0M9KpVKoVarlWq1WjndNhUPG3ApAWDcOxLTLwSDwWAOotFoDBaLxRMIBAsrKysne3t7Xzqd7k2n0/c4OzsDlUoFHA4364IyMDAATU1NxdWikhcq6tXKyhJezljPJZKI2eERS5cZeoWCMD2srCwhPX0tVzk2djiCG//GtfLLUoBxShB0dHTU3Lx580sLC4vtJBLJKMZoNBqQSqUglUqPdnR01PT09DT19/fLHjx40DM0NNQ72933GiSVGgB4JFQK+LfoSAGgnL04yppEIh2xtLS0t7GxcaFSqR7Ozs4fMRgMcHR0nJX8pJs3b54Ui8UXjT7RHIRMIkFK8irfwcEHPwQELUmqvYHUGJkLmJubw8YNa/i9vfffY/px3myQiDTPiEl9nVDDX576jaenZ7SnpyfLUJNrNBqQyWRw+/bt4x0dHTdkMlltV1dXw/XygjkdEv4wB0YOAK0AUM70C8HQ6fSzdDrdm0qlejg6OrLc3Ny2MBiMadWjfR4PHjyAmzdvZs/1v5MxoVAokJK8iicWS95k+nH+s0EiQhqpzQGoVFtYk5a87ba0XQAA34xbpagg/5zoT7s/OGNnZ8eaaYkBuVwOnZ2d5VKpVNTS0lLS2NhYWFVZ3Dujg5qQh6uY+ocvCAiKIPn4+Jz19PSMdnV15VCpVL6Dg4NBViw6nQ5EItHRpqamqzM+2DzHzo4O69amftLQeKsAZrDLgmBY/PyYsCIhfs+SiKUFE5Y8EwqFx11cXDihoaFTjjFAoVAwPDwMHR0dourq6jNCofDHhZqUVnvjmgIAcgAgJyg40mLRokX8kJCQjT4+PussLS1n1JPl7t27UFxcfHguB6mNjY2B7G4naNRTWyygUCjAYDGAx+PB0sICSCSi3vFYLBbCwjjA8vddBQtATKb7d3saBwc7IJPJBpsHjUGDGRYLJBIJLK0sAfucmyIGg4FFi3y8AwNZtycUk5KiS02vvf7WWQaDkejg4DApQwAeh3xDaWnpPoFAcPxFqnP6sEvgGf+A8Bx3d/cvIyIiNi1evHjT8wpNj8fAwACUlZW9P9dD5+/ckcFbf9gd2dcnn9LNAovF4inmZHtXNxdOdBR3+/JlS33pdP29wolEInA4weuiYxOy5vvuTkeHDHb+8c8xvb33Z3R9/N+Df+uIjYk02DwkEsna2trS1d/fNyGeF7uTyw1/7g3R3t4O2OxA/TVghULhcQqFQk1JSfmYSNR/5wD4d6EfgUBwvLS09IhUKhW9qAV5H9YjKQwJi6uvrKw8ERoamhkSEpKp7w7yJEqlEiQSyZmysrJv53qjdaVSCZdyTk+3qFMrAJRHRPLPN95qeifj5fU7mYt8JhyMRqMhMJDFdnF25gDAvBYTpXIMWlpay2fq/8m5mDcIABYGnEcGAGI/VlhBZWX1yZdSkz55OX0dV5+7w9bGGvz8mPrFpK62QskJjf2GTqd7x8bGbpnID4BCoUAmk0lLSkqOiESik2UleS/MakQflYKrXQDQxY1a3tTe3i6KiIjY5OXlxX7e9+rr6wsuXbr0t4ffn9OgMWjghMZQRcLp+8GulRVI/QPC37Wxtnal0ajJtjY2E451ZjiBra31vE9lR2PQQKFQaAAwo98Yi8Xq9fpPd56HO6rlvKWJv/PwcK+JilyCmajWMw6HAzs7+rMFpQOCIn6zHywSFvXm5eUdFAqFZ9Rq9bgHa2trq79w4cK+zz49cAARkmcpL81v/a/Dhz49d+7c3qqqqjyVSjXuOJ1OBxKJpDw3N/fA5V+zax6978cKw/sHhM/raMrnUVdboSy4fPWQSFSjd5yFBQWIRNKEd2IEw1J4JUd88WL+R51d3XrHWVDMnxUTa2tr1zXrNiUGsrmPf7DS4tymCxcu7Kuurs55+kKQSqVN586d23vs+8NHDXUCC5Wzp3/Iy8rKeruysvLM2Nhvo7VVKhXU1tYWnj17du/T7UOdnZ2D7OzsfGGB09raVi4S1RzXl0eFw+EAj8chYjKLVFffyOrq1C8mJBLpWTFRKBRyDofzC4vFWvXk+1ev/CLOzs7eKxAIslQqFeh0Oujp6enKzs7em/XTd7OayTqfKb56sT4rK+sPAoHg5KO/o0KhAKFQmHXy5MkdF3/5+TeZmctXpIXZ29v7zqVcKWNRX1epuXu3U/y8pEw0GmndOZt0dnXVDw0P6/W5oNHoZ30mQ0NDPb29vfvj4+Pf3rR5B/7od188XnEUXr4gDgmL+0NfX5/U19d3d3l5+YGfTnyDtLmcIhXXLsu4UcvfR6PRGGtra9eysrIjYrE45+kt4Fheou/69es/unnz5vm7d+/Wmsre2WRkZGTQ1DYg/JYGiUiTm1ugBAC9IfHPiEmDpFITE7fqJI/H27lmzZpDq5LWtz55t6wUXO3ihMYerK+vz2tpaUFaM0yT8tL81ujYle+TSCTrvEunBU9/voTLd92wYcPHVCqV39XVdXCu7+oYCp1O90Kc50Jk3I5+xVcv1jc3N5d4enpSMzIyvkpK3sh78nORsKg3++yPBS/q1q+hKCm61DSekERGJ3ikp6d/ERsbm1xVVXWwtbX1hRFtFAqFPMLMUyZsDyoQCI7LZDKIiIjwzczM/GpV0vro2TTsRSUqZoX3+vXrP1u9enXi0NAQiESirIdRtggIc5oJ40zq6uryGhoa8ry8vBJCQ0O9USjU94mrN7yWc+EnvaXb5gJMvxCMp6cnl0Kh2Le1tZVXXLs8L1LXefGrWRkZGZ/x+XyeUqkEkUh0vqenZ14HZyG8OEwoJjdrygd37NxTEBkZmWBtbQ3BwcEeKBTq+/UbX3/355Pfzlmn66qk9dGbN29+k8PhbCSRSNDZ2Snb9ae/HCkpKTksEhbN2QTD5NSX+Vu3bj0cHBzsjcFg4O7du1BWVvbNwxB9BIQ5j94I2Fu3bhXW19cDl8sFLBYLHA7Hg0wmf/e77e84ffXlPz6fLSMnQ2paZkJ4eHjmtm3b+B4eHvZkMhlQKBTY29s72dvbfxgUFJT8x7ffP1NRUfHjXErnZ/qFYKKjo7dt3rz5g8DAQPtH/XHa2tpqGhsbC55/BASEuYFeMblz505NTU3NgfDw8PcwGAygUCjw9fW1IJPJn/1130Hv0tLSI4WXL4hny9inYS+Osvbz80tgMpn8jIwMPovFch2vpoiDgwM4ODhwfH19OYsWLeJv3/Hu+cbGxquzXZz5aZYlvMRJT0/fFhkZue3JZmfd3d0gEolOIr4ShPmEXjFpkFRqXlrzSnFnZ+d7Tk5OjzNfXVxcICMjY6ezszNnVdL6vU8HWhmbgKAIkrOzMyc1NTXz0YU4maAuOp0OK1as4EVFRfGEQqHg1dfePHzr1q2rs71S8WOF4f38/BLS09M/iIyM5DxdxLq5uVlcVVU1bgVwBIS5il4xAQCQyWRigUBwJikpKe3JVGQcDgdLly7l2tranti0ecf7IpEoy9hbxX6sMDydTvdevXr1ltjY2F3u7u6AxT73FJ7B3Nwc4uLiwthsdphQKCzZkL7l0/r6+oKbNeVG90+EhMXZL1++fFtycvKHrq6uz4igUqmE5ubmEiTHCWG+8dwrUXD9imz9xtd/jIuLS7N5KpsTjUZDUFCQE4PB+F4oFGYmJW888Mv5k4UTHGpGxC9LYaenp78VEhKyxdHRESgUyoyOh0KhwNraGuLi4qIDAgKi6+rqyjekb/mHMSN6N6RvSdu+ffseNpsdZm09ftuW+vp6EIvFSB9hhHnHpG7rUqm0orW1tdXS0tLj6TIEaDQaaDQaxMfH811dXTl/3Xfw+JUrVz411J01cfWG6IiIiC07d+5McHNzs7ewMGyOFw6HAwcHB6BSqVx3d/fwz7/4rkAgEBwXCoUnHpZonDGrU9J5MTEx27du3Zrm4uKC0beaqq6u/ry+vj7XEPMiIMwmkxKTimuXZe/u+fCkp6fnexPdUfF4PPj7+1szGIydLi4unF1/+kvenTt3RG1tbRXTqfma8lIG39/fP/HVV19NZrFYHpMpzjQTzMzMwNPTE+Pp6Zng6emZ4Ofnl5CesfV8bW1tznQe3/wDwvFeXl7Rvr6+Ca+88kpaUFCQh74GXzqdDrq7u6GpqankRQmdR1hYTNrhUFVVlcXj8d6ysrKy0OfstLS0hPj4eC6Xy+U2NzeDRCI5/sa2XeX37t1rGhwc7BoYGJBN1P+FFbiE5OzszGaxWImvvvrqpoCAAKfp+ERmCpPJBCaTmcnhcDJLS0u/TE59+YxUKhXoi/lg+oVgrKysGJaWlna2trYeaWlpXDabvTMgIGDSfp2KiorzbW1tL0zoPMLCYtJX6uVfs2u++PKowMPDgz+ZIslEIhECAgKAxWJlajSazJ6eHmhra4PW1tZvtmz9o6Czs7O+r6+vfWxsbFir1WosLCzsV6xYkcnj8d7z9vaelmPV0Hh5eYGnp+f2mJiY7UVFRZ/HL0v5tru7+5ZGo1FisVg8Docj4fF4CxsbG1c+nx/m7e39sYeHB7i4uIC5ufmU6r4ODQ1BZWXlifkSrYuA8DRTumIrKytPent78728vCb9HRQKBVgsFhwcHIBOpwObzd4yNja2RaVSwdDQEHR1dcHo6CjQaDRwdXWdsWPV0KBQKPDw8AA7O7udERERO2tra2FgYACoVCo4OTkBjUYDMpkMeDz+8WuqaLVaaGxsbL19+/YzSX8ICPOFqYrJidDQ0AwvLy/e80c/CwaDARKJBI86BdJoNHB3dwe1Wj0nViL6IJPJwGQywdnZGZRKJRAIBDBUx8OBgQEoLS39BtkORpjPTJg1PB61N64pmpqarvb39xvUiLkuJE9CJpPBxsbGYEICANDZ2SlHgtQQ5jtTEhMAgLq6ulyJRFJvDGNeREZGRkAikRSUFuci2cEI85opi0l+7hmBWCzOeV6dToTJcfv27cHr168jxbgR5j1TFhMAgObm5hKZDNl0MAQtLS3Xzpw6hkS8Isx7piUmUqlUIBAIJuyjgzA5Ojs7QSKRINGuCAuCaYmJsKKw68qVK59KJJIu5HFneiiVSigqKjouEolOmtoWBARDMC0xAQC4+MvPJadOnXq3ra1N8yL0dDEkOp0OSktLy/Pz8w8+3d4CAWG+Mm0xAQA4fuy/jl+8ePGju3fvGsqeBY9Wq4XKysrWU6dOvX31yi8mKyyFgGBoZiQmAAD/79D+fadPn96PCMrz0el0UFVV1frtt9+mj9fiAgFhPjNjMQEAyMvLO3Ds2LE/tLS0INmuerh27Vr9999//xoiJAgLEYOEntbVVigB4PNNm3cMpqSkfMRms50McdyFgkqlgqKiovJTp069nZ97BhEShAWJQePYj373xdF1GzbLFQrFx6Ghob766ne8KNy7dw+KiopO5ubmfmTK4tsICMbG4EkxWT99d35l4rre/v7+D0NCQvh0Ot3QU8wL1Go1SKVSTX5+/sH8/PyDSP8bhIWOUTLsLuVklQcFR65pbGzcvnLlyvfc3NwsCASCMaaac+h0OhgaGoLq6uqaCxcu/OV01tGcTw7uM7VZCAhGx2jpug/vxAd58atzoqKitq1cuXKnvb29saabE+h0Oqiurpbm5eUdrK6uPlspuDrvY0hmO4YIhUIBGq1/X2CmNqFQKL3/79HomZ/z82xEowyy9zFr80zGDqPn/hdeviBmL47ad+fOnRsRERGbQkNDo62srIw97azT2dkJxcXFx0tKSo7Mdh8hY4LD4TDPH2U4MFjMc6tLmZmZzaj+Aw6H0/t9PB4PGCxmRudNJBL0ngeZTAI0Gj3jv+1szfM88Hic8cUEAKCmqlQOAN/ELU2qkEgkySwWK3HRokVcBoMxG9MbDZ1OB83NzdDU1FRQW1t7XiAQHJ+ovu18pbr6Rg6L5ZtoM0EhcUPT0tJW8tWRb0vQqIkvgKqqmhnVfrl2TfANXo+gjKlUio4OWc1M5sjOzjnQUH8rbqLPu3t6moaGhmfc+3q25tGHUqmECoEIUKbIrVkcEkONiIh4jcvlvu7s7OxLo9GmVe7QVCgUCujq6oKGhoaCioqKo9XV1WeM3YDMVPDik1gpyas+XrVyeaKXl8czjyANjbcgI/MNmkg49Q4ECPOH3NyC4RUr+M8IcHt7B1y9WlKRl3/5kElKnD1sfXEoJCzueEBAQGJYWFgGk8nk2djYAIFAgLm4pTw6Ogqjo6Mgl8vhxo0b50tLS4/U19fnLvS2FIWXfxEDQNLmLW9ueW1TxtchHDaQyWRTm4VgYkZHR6G+vhF+/NfP+y5e+vVjiVgwZpKVydOwF0dZW1lZOTGZTD6bzU4LCAiIptPp8HTDL1MwOjoKLS0tUFdXd1IsFudIpdKKgYGB7tloJTrX4MUnsVJTEj9etzY10dHRAQAAGm81wcsZW5CVyQInL69gNCGBjwcAGBx8ANnncypOnTr3H9nn/reD55wovvrQpyIHAHFUzIocGo3mQaPRfBwdHVlubm7bXF1dgcFgABqNNvruglwuh7t374JMJoOOjo7P79y5I+ru7m7q7e1tXQi7MzOh8PIv4pCw2DdaWtte37Au7aPIyCWAxWABjUbPif9HCMbjURtKiaQBfvr5zH9evlJ0uLQ4r/nJMXNiZTIRrMAlJAcHB18HBweWo6Mjy8rKajeJRAJLS0uwtLQECwsLoFAogMfjAYvFgpmZ2XNXMyqVCoaHh2FoaAiGh4cfvwYGBqCvrw+6u7vfvnfvXlNvb29rT09Pq0QsUM7S6c4rNqS/lrZ5U+YPRBKR9M7u9xwqBUUvtNAudH766XSLE8PR49ixE78/8tVnX403Zk7fUR46NUUAIPIPCMdTKJTdNjY2QKPRgE6nA51OB1tbWyCRSIDD4YBAIAAejwcCgfDYUajVakGlUoFarQadTvfY79HX1wf9/f0gl8tBLpfDvXv3HvXw+dxQPYYXMj+d+P7Mmzv+5OHr6/OJWq1GBHeB09TcUiKuq/coKS3/eqIx/wPkiIXC3w6YjAAAAABJRU5ErkJggg=="); + + --keyword: #ff79c6; + --identifier: #f8f8f2; + --comment: #6272a4; + --operator: #ff79c6; + --punctuation: #f8f8f2; + --other: #f8f8f2; + --escapeSequence: #bd93f9; + --number: #bd93f9; + --literal: #f1fa8c; + --program: #9090c0; + --option: #90b010; + --raw-data: #8be9fd; + + --clipboard-image-normal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' fill='none' viewBox='0 0 24 24' stroke='currentColor'%3E %3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2' /%3E %3C/svg%3E"); + --clipboard-image-selected: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' style='color: lightgray' viewBox='0 0 20 20' fill='currentColor'%3E %3Cpath d='M8 3a1 1 0 011-1h2a1 1 0 110 2H9a1 1 0 01-1-1z' /%3E %3Cpath d='M6 3a2 2 0 00-2 2v11a2 2 0 002 2h8a2 2 0 002-2V5a2 2 0 00-2-2 3 3 0 01-3 3H9a3 3 0 01-3-3z' /%3E %3C/svg%3E"); + --clipboard-image: var(--clipboard-image-normal); + } +} + +.theme-select-wrapper { + display: flex; + align-items: center; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; } + +body { + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-weight: 400; + font-size: 1.125em; + line-height: 1.5; + color: var(--text); + background-color: var(--primary-background); } + +/* Skeleton grid */ +.container { + position: relative; + width: 100%; + max-width: 1050px; + margin: 0 auto; + padding: 0; + box-sizing: border-box; } + +.column, .columns { + width: 100%; + float: left; + box-sizing: border-box; + margin-left: 1%; } + +@media print { + #global-links, .link-seesrc, .theme-switch-wrapper, #searchInputDiv, .search-groupby { + display:none; + } + .columns { + width:100% !important; + } +} + +.column:first-child, .columns:first-child { + margin-left: 0; } + +.container .row { + display: flex; } + +.three.columns { + width: 25.0%; + height: 100vh; + position: sticky; + top: 0px; + overflow-y: auto; + padding: 2px; +} + +.nine.columns { + width: 75.0%; + padding-left: 1.5em; } + +.twelve.columns { + width: 100%; + margin-left: 0; } + +@media screen and (max-width: 860px) { + .three.columns { + display: none; + } + .nine.columns { + width: 98.0%; + } + body { + font-size: 1em; + line-height: 1.35; + } +} + +cite { + font-style: italic !important; } + + +/* Nim search input */ +div#searchInputDiv { + margin-bottom: 1em; +} +input#searchInput { + width: 80%; +} + +/* + * Some custom formatting for input forms. + * This also fixes input form colors on Firefox with a dark system theme on Linux. + */ +input { + -moz-appearance: none; + background-color: var(--secondary-background); + color: var(--text); + border: 1px solid var(--border); + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-size: 0.9em; + padding: 6px; +} + +input:focus { + border: 1px solid var(--input-focus); + box-shadow: 0 0 3px var(--input-focus); +} + +select { + -moz-appearance: none; + background-color: var(--secondary-background); + color: var(--text); + border: 1px solid var(--border); + font-family: "Lato", "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, sans-serif; + font-size: 0.9em; + padding: 6px; +} + +select:focus { + border: 1px solid var(--input-focus); + box-shadow: 0 0 3px var(--input-focus); +} + +/* Docgen styles */ + +:target { + border: 2px solid #B5651D; + border-style: dotted; +} + +/* Links */ +a { + color: var(--anchor); + text-decoration: none; +} + +a span.Identifier { + text-decoration: underline; + text-decoration-color: #aab; +} + +a.reference-toplevel { + font-weight: bold; +} + +a.nimdoc { + word-spacing: 0.3em; +} + +a.toc-backref { + text-decoration: none; + color: var(--text); +} + +a.link-seesrc { + color: #607c9f; + font-size: 0.9em; + font-style: italic; +} + +a:hover, a:focus { + color: var(--anchor-focus); + text-decoration: underline; +} + +a:hover span.Identifier { + color: var(--anchor); +} + + +sub, sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; } + +sup { + top: -0.5em; } + +sub { + bottom: -0.25em; } + +img { + width: auto; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; } + +@media print { + * { + color: black !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; } + + a, a:visited { + text-decoration: underline; } + + a[href]:after { + content: " (" attr(href) ")"; } + + abbr[title]:after { + content: " (" attr(title) ")"; } + + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; } + + pre, blockquote { + border: 1px solid #999; + page-break-inside: avoid; } + + thead { + display: table-header-group; } + + tr, img { + page-break-inside: avoid; } + + img { + max-width: 100% !important; } + + @page { + margin: 0.5cm; } + + h1 { + page-break-before: always; } + + h1.title { + page-break-before: avoid; } + + p, h2, h3 { + orphans: 3; + widows: 3; } + + h2, h3 { + page-break-after: avoid; } +} + + +p { + margin-top: 0.5em; + margin-bottom: 0.5em; } + +small { + font-size: 85%; } + +strong { + font-weight: 600; + font-size: 0.95em; + color: var(--strong); } + +em { + font-style: italic; } + +h1 { + font-size: 1.8em; + font-weight: 400; + padding-bottom: .25em; + border-bottom: 6px solid var(--third-background); + margin-top: 2.5em; + margin-bottom: 1em; + line-height: 1.2em; } + +h1.title { + padding-bottom: 1em; + border-bottom: 0px; + font-size: 2.5em; + text-align: center; + font-weight: 900; + margin-top: 0.75em; + margin-bottom: 0em; } + +h2 { + font-size: 1.3em; + margin-top: 2em; } + +h2.subtitle { + margin-top: 0em; + text-align: center; } + +h3 { + font-size: 1.125em; + font-style: italic; + margin-top: 1.5em; } + +h4 { + font-size: 1.125em; + margin-top: 1em; } + +h5 { + font-size: 1.125em; + margin-top: 0.75em; } + +h6 { + font-size: 1.1em; } + + +ul, ol { + padding: 0; + margin-top: 0.5em; + margin-left: 0.75em; } + +ul ul, ul ol, ol ol, ol ul { + margin-bottom: 0; + margin-left: 1.25em; } + +ul.simple > li { + list-style-type: circle; } + +ul.simple-boot li { + list-style-type: none; + margin-left: 0em; + margin-bottom: 0.5em; } + +ol.simple > li, ul.simple > li { + margin-bottom: 0.2em; + margin-left: 0.4em } + +ul.simple.simple-toc > li { + margin-top: 1em; } + +ul.simple-toc { + list-style: none; + font-size: 0.9em; + margin-left: -0.3em; + margin-top: 1em; } + +ul.simple-toc > li { + list-style-type: none; } + +ul.simple-toc-section { + list-style-type: circle; + margin-left: 0.8em; + color: #6c9aae; } + +ul.nested-toc-section { + list-style-type: circle; + margin-left: -0.75em; + color: var(--text); } + +ul.nested-toc-section > li { + margin-left: 1.25em; } + + +ol.arabic { + list-style: decimal; } + +ol.loweralpha { + list-style: lower-alpha; } + +ol.upperalpha { + list-style: upper-alpha; } + +ol.lowerroman { + list-style: lower-roman; } + +ol.upperroman { + list-style: upper-roman; } + +ul.auto-toc { + list-style-type: none; } + + +dl { + margin-bottom: 1.5em; } + +dt { + margin-bottom: -0.5em; + margin-left: 0.0em; } + +dd { + margin-left: 2.0em; + margin-bottom: 3.0em; + margin-top: 0.5em; } + + +hr { + margin: 2em 0; + border: 0; + border-top: 1px solid #aaa; } + +hr.footnote { + width: 25%; + border-top: 0.15em solid #999; + margin-bottom: 0.15em; + margin-top: 0.15em; +} +div.footnote-group { + margin-left: 1em; +} +div.footnote-label { + display: inline-block; + min-width: 1.7em; +} + +div.option-list { + border: 0.1em solid var(--border); +} +div.option-list-item { + padding-left: 12em; + padding-right: 0; + padding-bottom: 0.3em; + padding-top: 0.3em; +} +div.odd { + background-color: var(--secondary-background); +} +div.option-list-label { + margin-left: -11.5em; + margin-right: 0em; + min-width: 11.5em; + display: inline-block; + vertical-align: top; +} +div.option-list-description { + width: calc(100% - 1em); + padding-left: 1em; + padding-right: 0; + display: inline-block; +} + +blockquote { + font-size: 0.9em; + font-style: italic; + padding-left: 0.5em; + margin-left: 0; + border-left: 5px solid #bbc; +} + +blockquote.markdown-quote { + font-size: 0.9rem; /* use rem to avoid recursion */ + font-style: normal; +} + +.pre, span.tok { + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + font-weight: 500; + font-size: 0.85em; + color: var(--text); + background-color: var(--third-background); + padding-left: 3px; + padding-right: 3px; + border-radius: 4px; +} + +span.tok { + border: 1px solid #808080; + padding-bottom: 0.1em; + margin-right: 0.2em; +} + +.copyToClipBoard { + position: relative; +} + +pre { + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + color: var(--text); + font-weight: 500; + display: inline-block; + box-sizing: border-box; + min-width: 100%; + padding: 0.5em; + margin-top: 0.5em; + margin-bottom: 0.5em; + font-size: 0.85em; + white-space: pre !important; + overflow-y: hidden; + overflow-x: visible; + background-color: var(--secondary-background); + border: 1px solid var(--border); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.copyToClipBoardBtn { + visibility: hidden; + position: absolute; + width: 24px; + border-radius: 4px; + background-image: var(--clipboard-image); + right: 5px; + top: 13px; + background-color: var(--secondary-background); + padding: 11px; + border: 0; +} + +.copyToClipBoard:hover .copyToClipBoardBtn { + visibility: visible; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } + + +/* Nim line-numbered tables */ +.line-nums-table { + width: 100%; + table-layout: fixed; } + +table.line-nums-table { + border-radius: 4px; + border: 1px solid #cccccc; + background-color: ghostwhite; + border-collapse: separate; + margin-top: 15px; + margin-bottom: 25px; } + +.line-nums-table tbody { + border: none; } + +.line-nums-table td pre { + border: none; + background-color: transparent; } + +.line-nums-table td.blob-line-nums { + width: 28px; } + +.line-nums-table td.blob-line-nums pre { + color: #b0b0b0; + -webkit-filter: opacity(75%); + filter: opacity(75%); + text-align: right; + border-color: transparent; + background-color: transparent; + padding-left: 0px; + margin-left: 0px; + padding-right: 0px; + margin-right: 0px; } + + +table { + max-width: 100%; + background-color: transparent; + margin-top: 0.5em; + margin-bottom: 1.5em; + border-collapse: collapse; + border-color: var(--third-background); + border-spacing: 0; + font-size: 0.9em; +} + +table th, table td { + padding: 0px 0.5em 0px; + border-color: var(--third-background); +} + +table th { + background-color: var(--third-background); + border-color: var(--third-background); + font-weight: bold; } + +table th.docinfo-name { + background-color: transparent; + text-align: right; +} + +table tr:hover { + background-color: var(--third-background); } + + +/* rst2html default used to remove borders from tables and images */ +.borderless, table.borderless td, table.borderless th { + border: 0; } + +table.borderless td, table.borderless th { + /* Override padding for "table.docutils td" with "! important". + The right padding separates the table cells. */ + padding: 0 0.5em 0 0 !important; } + +.admonition { + padding: 0.3em; + background-color: var(--secondary-background); + border-left: 0.4em solid #7f7f84; + margin-bottom: 0.5em; + -webkit-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); + -moz-box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); + box-shadow: 0 5px 8px -6px rgba(0,0,0,.2); +} +.admonition-info { + border-color: var(--info-background); +} +.admonition-info-text { + color: var(--info-background); +} +.admonition-warning { + border-color: var(--warning-background); +} +.admonition-warning-text { + color: var(--warning-background); +} +.admonition-error { + border-color: var(--error-background); +} +.admonition-error-text { + color: var(--error-background); +} + +.first { + /* Override more specific margin styles with "! important". */ + margin-top: 0 !important; } + +.last, .with-subtitle { + margin-bottom: 0 !important; } + +.hidden { + display: none; } + +blockquote.epigraph { + margin: 2em 5em; } + +dl.docutils dd { + margin-bottom: 0.5em; } + +object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] { + overflow: hidden; } + + +div.figure { + margin-left: 2em; + margin-right: 2em; } + +div.footer, div.header { + clear: both; + text-align: center; + color: #666; + font-size: smaller; } + +div.footer { + padding-top: 5em; } + +div.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; } + +div.line-block div.line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; } + +div.topic { + margin: 2em; } + +div.search_results { + background-color: var(--third-background); + margin: 3em; + padding: 1em; + border: 1px solid #4d4d4d; } + +div#global-links ul { + margin-left: 0; + list-style-type: none; } + +div#global-links > simple-boot { + margin-left: 3em; } + +hr.docutils { + width: 75%; } + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; } + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; } + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; } + +.align-left { + text-align: left; } + +.align-center { + clear: both; + text-align: center; } + +.align-right { + text-align: right; } + +/* reset inner alignment in figures */ +div.align-right { + text-align: inherit; } + +p.attribution { + text-align: right; + margin-left: 50%; } + +p.caption { + font-style: italic; } + +p.credits { + font-style: italic; + font-size: smaller; } + +p.label { + white-space: nowrap; } + +p.rubric { + font-weight: bold; + font-size: larger; + color: maroon; + text-align: center; } + +p.topic-title { + font-weight: bold; } + +pre.address { + margin-bottom: 0; + margin-top: 0; + font: inherit; } + +pre.literal-block, pre.doctest-block, pre.math, pre.code { + margin-left: 2em; + margin-right: 2em; } + +pre.code .ln { + color: grey; } + +/* line numbers */ +pre.code, code { + background-color: #eeeeee; } + +pre.code .comment, code .comment { + color: #5c6576; } + +pre.code .keyword, code .keyword { + color: #3B0D06; + font-weight: bold; } + +pre.code .literal.string, code .literal.string { + color: #0c5404; } + +pre.code .name.builtin, code .name.builtin { + color: #352b84; } + +pre.code .deleted, code .deleted { + background-color: #DEB0A1; } + +pre.code .inserted, code .inserted { + background-color: #A3D289; } + +span.classifier { + font-style: oblique; } + +span.classifier-delimiter { + font-weight: bold; } + +span.problematic { + color: #b30000; } + +span.section-subtitle { + /* font-size relative to parent (h1..h6 element) */ + font-size: 80%; } + +span.DecNumber { + color: var(--number); } + +span.BinNumber { + color: var(--number); } + +span.HexNumber { + color: var(--number); } + +span.OctNumber { + color: var(--number); } + +span.FloatNumber { + color: var(--number); } + +span.Identifier { + color: var(--identifier); } + +span.Keyword { + font-weight: 600; + color: var(--keyword); } + +span.StringLit { + color: var(--literal); } + +span.LongStringLit { + color: var(--literal); } + +span.CharLit { + color: var(--literal); } + +span.EscapeSequence { + color: var(--escapeSequence); } + +span.Operator { + color: var(--operator); } + +span.Punctuation { + color: var(--punctuation); } + +span.Comment, span.LongComment { + font-style: italic; + font-weight: 400; + color: var(--comment); } + +span.RegularExpression { + color: darkviolet; } + +span.TagStart { + color: darkviolet; } + +span.TagEnd { + color: darkviolet; } + +span.Key { + color: #252dbe; } + +span.Value { + color: #252dbe; } + +span.RawData { + color: var(--raw-data); } + +span.Assembler { + color: #252dbe; } + +span.Preprocessor { + color: #252dbe; } + +span.Directive { + color: #252dbe; } + +span.option { + font-weight: bold; + font-family: "Source Code Pro", Monaco, Menlo, Consolas, "Courier New", monospace; + color: var(--option); } + +span.Prompt { + font-weight: bold; + color: red; } + +span.ProgramOutput { + font-weight: bold; + color: #808080; } + +span.program { + font-weight: bold; + color: var(--program); + text-decoration: underline; + text-decoration-color: var(--hint); + text-decoration-thickness: 0.05em; + text-underline-offset: 0.15em; } + +span.Command, span.Rule, span.Hyperlink, +span.Label, span.Reference, span.Other { + color: var(--other); } + +/* Pop type, const, proc, and iterator defs in nim def blocks */ +dt pre > span.Identifier, dt pre > span.Operator { + color: var(--identifier); + font-weight: 700; } + +dt pre > span.Keyword ~ span.Identifier, dt pre > span.Identifier ~ span.Identifier, +dt pre > span.Operator ~ span.Identifier, dt pre > span.Other ~ span.Identifier { + color: var(--identifier); + font-weight: inherit; } + +/* Nim sprite for the footer (taken from main page favicon) */ +.nim-sprite { + display: inline-block; + width: 51px; + height: 14px; + background-position: 0 0; + background-size: 51px 14px; + -webkit-filter: opacity(50%); + filter: opacity(50%); + background-repeat: no-repeat; + background-image: var(--nim-sprite-base64); + margin-bottom: 5px; } + +span.pragmadots { + /* Position: relative frees us up to make the dots + look really nice without fucking up the layout and + causing bulging in the parent container */ + position: relative; + /* 1px down looks slightly nicer */ + top: 1px; + padding: 2px; + background-color: var(--third-background); + border-radius: 4px; + margin: 0 2px; + cursor: pointer; + font-size: 0.8em; } + +span.pragmadots:hover { + background-color: var(--hint); } + +span.pragmawrap { + display: none; } + +span.attachedType { + display: none; + visibility: hidden; }