[{"data":1,"prerenderedAt":4958},["ShallowReactive",2],{"sidebar-pages":3,"doc-/l3-modules":20},[4,8,12,16],{"_path":5,"title":6,"order":7},"/abi","ABI & boundary",2,{"_path":9,"title":10,"order":11},"/architecture","Architecture",1,{"_path":13,"title":14,"order":15},"/l3-modules","L3 — Provider SDK",3,{"_path":17,"title":18,"order":19},"/l4-apps","L4 — App SDK",4,{"_path":13,"_dir":21,"_draft":22,"_partial":22,"_locale":21,"title":14,"description":21,"order":15,"body":23,"_type":4951,"_id":4952,"_source":4953,"_file":4954,"_stem":4955,"_extension":4956,"sitemap":4957},"",false,{"type":24,"children":25,"toc":4930},"root",[26,35,82,89,153,218,268,325,331,352,788,806,950,1001,1025,1284,1290,1335,3515,3520,3627,3646,3652,3659,3892,3898,4014,4028,4100,4205,4216,4229,4263,4446,4466,4479,4549,4569,4614,4627,4695,4701,4886,4892,4924],{"type":27,"tag":28,"props":29,"children":31},"element","h1",{"id":30},"legion-l3-capability-provider-sdk-writing-modules",[32],{"type":33,"value":34},"text","Legion L3 — Capability-Provider SDK (writing modules)",{"type":27,"tag":36,"props":37,"children":38},"blockquote",{},[39],{"type":27,"tag":40,"props":41,"children":42},"p",{},[43,49,51,56,58,69,71,80],{"type":27,"tag":44,"props":45,"children":46},"strong",{},[47],{"type":33,"value":48},"Status: DRAFT",{"type":33,"value":50}," (Foundation 09). This is the first visible cut of the L3\nmodule-author API. It is a ",{"type":27,"tag":44,"props":52,"children":53},{},[54],{"type":33,"value":55},"draft, not a release candidate",{"type":33,"value":57}," — names and\nsignatures may change. Start with ",{"type":27,"tag":59,"props":60,"children":61},"a",{"href":9},[62],{"type":27,"tag":63,"props":64,"children":66},"code",{"className":65},[],[67],{"type":33,"value":68},"architecture.md",{"type":33,"value":70}," for the\nlayer model and ",{"type":27,"tag":59,"props":72,"children":73},{"href":5},[74],{"type":27,"tag":63,"props":75,"children":77},{"className":76},[],[78],{"type":33,"value":79},"abi.md",{"type":33,"value":81}," for the linkage/boundary rules.",{"type":27,"tag":83,"props":84,"children":86},"h2",{"id":85},"what-l3-is",[87],{"type":33,"value":88},"What L3 is",{"type":27,"tag":40,"props":90,"children":91},{},[92,94,99,101,106,108,113,115,121,123,129,130,136,138,143,145,151],{"type":33,"value":93},"L3 is the ",{"type":27,"tag":44,"props":95,"children":96},{},[97],{"type":33,"value":98},"provider",{"type":33,"value":100}," surface: you write a ",{"type":27,"tag":44,"props":102,"children":103},{},[104],{"type":33,"value":105},"module",{"type":33,"value":107}," that offers one or more\n",{"type":27,"tag":44,"props":109,"children":110},{},[111],{"type":33,"value":112},"capabilities",{"type":33,"value":114}," (e.g. ",{"type":27,"tag":63,"props":116,"children":118},{"className":117},[],[119],{"type":33,"value":120},"kvstore",{"type":33,"value":122},", ",{"type":27,"tag":63,"props":124,"children":126},{"className":125},[],[127],{"type":33,"value":128},"ai.stt.transcribe",{"type":33,"value":122},{"type":27,"tag":63,"props":131,"children":133},{"className":132},[],[134],{"type":33,"value":135},"audio.out",{"type":33,"value":137},"). A module\ndeclares the capabilities it provides, implements a handler for its methods, and\n— once its node holds a certificate authorising those capabilities — they are\n",{"type":27,"tag":44,"props":139,"children":140},{},[141],{"type":33,"value":142},"automatically advertised",{"type":33,"value":144}," to the cohort (declaring ",{"type":27,"tag":146,"props":147,"children":148},"em",{},[149],{"type":33,"value":150},"is",{"type":33,"value":152}," advertising; there is\nno separate publish step).",{"type":27,"tag":40,"props":154,"children":155},{},[156,161,163,169,170,176,178,183,185,191,193,198,200,206,208,216],{"type":27,"tag":44,"props":157,"children":158},{},[159],{"type":33,"value":160},"L3 is an in-process header contract, not the dynamic ABI.",{"type":33,"value":162}," A module includes a\nsingle header and is either compiled into the runtime or loaded at runtime; the\nL3 symbols it calls (",{"type":27,"tag":63,"props":164,"children":166},{"className":165},[],[167],{"type":33,"value":168},"legion_module_register",{"type":33,"value":122},{"type":27,"tag":63,"props":171,"children":173},{"className":172},[],[174],{"type":33,"value":175},"legion_l3_kv_set",{"type":33,"value":177},", …) are ",{"type":27,"tag":44,"props":179,"children":180},{},[181],{"type":33,"value":182},"not",{"type":33,"value":184},"\nexported by ",{"type":27,"tag":63,"props":186,"children":188},{"className":187},[],[189],{"type":33,"value":190},"liblegion.so",{"type":33,"value":192},". They resolve against the ",{"type":27,"tag":44,"props":194,"children":195},{},[196],{"type":33,"value":197},"host executable",{"type":33,"value":199}," (the\nruntime/tools link the static library with ",{"type":27,"tag":63,"props":201,"children":203},{"className":202},[],[204],{"type":33,"value":205},"--whole-archive --export-dynamic",{"type":33,"value":207},").\nSee ",{"type":27,"tag":59,"props":209,"children":210},{"href":5},[211],{"type":27,"tag":63,"props":212,"children":214},{"className":213},[],[215],{"type":33,"value":79},{"type":33,"value":217},".",{"type":27,"tag":219,"props":220,"children":224},"pre",{"className":221,"code":222,"language":223,"meta":21,"style":21},"language-c shiki shiki-themes github-dark github-dark","#include \"legion/sdk.h\"        /* the entire L3 module-author surface */\n#include \"legion/legion_pal.h\" /* legion_pal->alloc / ->free, time, locks */\n","c",[225],{"type":27,"tag":63,"props":226,"children":227},{"__ignoreMap":21},[228,251],{"type":27,"tag":229,"props":230,"children":232},"span",{"class":231,"line":11},"line",[233,239,245],{"type":27,"tag":229,"props":234,"children":236},{"style":235},"--shiki-default:#F97583;--shiki-dark:#F97583",[237],{"type":33,"value":238},"#include",{"type":27,"tag":229,"props":240,"children":242},{"style":241},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF",[243],{"type":33,"value":244}," \"legion/sdk.h\"",{"type":27,"tag":229,"props":246,"children":248},{"style":247},"--shiki-default:#6A737D;--shiki-dark:#6A737D",[249],{"type":33,"value":250},"        /* the entire L3 module-author surface */\n",{"type":27,"tag":229,"props":252,"children":253},{"class":231,"line":7},[254,258,263],{"type":27,"tag":229,"props":255,"children":256},{"style":235},[257],{"type":33,"value":238},{"type":27,"tag":229,"props":259,"children":260},{"style":241},[261],{"type":33,"value":262}," \"legion/legion_pal.h\"",{"type":27,"tag":229,"props":264,"children":265},{"style":247},[266],{"type":33,"value":267}," /* legion_pal->alloc / ->free, time, locks */\n",{"type":27,"tag":40,"props":269,"children":270},{},[271,273,278,280,286,287,293,295,301,302,308,309,315,317,323],{"type":33,"value":272},"A module source may include ",{"type":27,"tag":44,"props":274,"children":275},{},[276],{"type":33,"value":277},"only",{"type":33,"value":279}," ",{"type":27,"tag":63,"props":281,"children":283},{"className":282},[],[284],{"type":33,"value":285},"sdk.h",{"type":33,"value":122},{"type":27,"tag":63,"props":288,"children":290},{"className":289},[],[291],{"type":33,"value":292},"legion_pal.h",{"type":33,"value":294},", and the SDK\nallowlist; reaching below L3 (",{"type":27,"tag":63,"props":296,"children":298},{"className":297},[],[299],{"type":33,"value":300},"core/plugin.h",{"type":33,"value":122},{"type":27,"tag":63,"props":303,"children":305},{"className":304},[],[306],{"type":33,"value":307},"core/consensus.h",{"type":33,"value":122},{"type":27,"tag":63,"props":310,"children":312},{"className":311},[],[313],{"type":33,"value":314},"core/lnmp_*",{"type":33,"value":316},",\n…) is rejected by the Foundation 04.01 CI gate (",{"type":27,"tag":63,"props":318,"children":320},{"className":319},[],[321],{"type":33,"value":322},"check_module_includes.sh",{"type":33,"value":324},").",{"type":27,"tag":83,"props":326,"children":328},{"id":327},"the-shape-of-a-module",[329],{"type":33,"value":330},"The shape of a module",{"type":27,"tag":40,"props":332,"children":333},{},[334,336,342,344,350],{"type":33,"value":335},"A module is one ",{"type":27,"tag":63,"props":337,"children":339},{"className":338},[],[340],{"type":33,"value":341},"legion_module_registration_t",{"type":33,"value":343}," record (",{"type":27,"tag":63,"props":345,"children":347},{"className":346},[],[348],{"type":33,"value":349},"sdk.h:213",{"type":33,"value":351},"):",{"type":27,"tag":353,"props":354,"children":355},"table",{},[356,380],{"type":27,"tag":357,"props":358,"children":359},"thead",{},[360],{"type":27,"tag":361,"props":362,"children":363},"tr",{},[364,370,375],{"type":27,"tag":365,"props":366,"children":367},"th",{},[368],{"type":33,"value":369},"Field",{"type":27,"tag":365,"props":371,"children":372},{},[373],{"type":33,"value":374},"Type",{"type":27,"tag":365,"props":376,"children":377},{},[378],{"type":33,"value":379},"Purpose",{"type":27,"tag":381,"props":382,"children":383},"tbody",{},[384,432,473,529,561,594,620,664,686,719,749],{"type":27,"tag":361,"props":385,"children":386},{},[387,404,413],{"type":27,"tag":388,"props":389,"children":390},"td",{},[391,397,398],{"type":27,"tag":63,"props":392,"children":394},{"className":393},[],[395],{"type":33,"value":396},"name",{"type":33,"value":122},{"type":27,"tag":63,"props":399,"children":401},{"className":400},[],[402],{"type":33,"value":403},"version",{"type":27,"tag":388,"props":405,"children":406},{},[407],{"type":27,"tag":63,"props":408,"children":410},{"className":409},[],[411],{"type":33,"value":412},"const char *",{"type":27,"tag":388,"props":414,"children":415},{},[416,418,424,425,431],{"type":33,"value":417},"Module identity (",{"type":27,"tag":63,"props":419,"children":421},{"className":420},[],[422],{"type":33,"value":423},"\"kvstore\"",{"type":33,"value":122},{"type":27,"tag":63,"props":426,"children":428},{"className":427},[],[429],{"type":33,"value":430},"\"0.1.0\"",{"type":33,"value":324},{"type":27,"tag":361,"props":433,"children":434},{},[435,452,461],{"type":27,"tag":388,"props":436,"children":437},{},[438,444,446],{"type":27,"tag":63,"props":439,"children":441},{"className":440},[],[442],{"type":33,"value":443},"provided_caps",{"type":33,"value":445}," / ",{"type":27,"tag":63,"props":447,"children":449},{"className":448},[],[450],{"type":33,"value":451},"provided_cap_count",{"type":27,"tag":388,"props":453,"children":454},{},[455],{"type":27,"tag":63,"props":456,"children":458},{"className":457},[],[459],{"type":33,"value":460},"const char **",{"type":27,"tag":388,"props":462,"children":463},{},[464,466,471],{"type":33,"value":465},"Capabilities this module offers — ",{"type":27,"tag":44,"props":467,"children":468},{},[469],{"type":33,"value":470},"declaring them advertises them",{"type":33,"value":472}," (cert-gated).",{"type":27,"tag":361,"props":474,"children":475},{},[476,485,494],{"type":27,"tag":388,"props":477,"children":478},{},[479],{"type":27,"tag":63,"props":480,"children":482},{"className":481},[],[483],{"type":33,"value":484},"provided_cap_semantics",{"type":27,"tag":388,"props":486,"children":487},{},[488],{"type":27,"tag":63,"props":489,"children":491},{"className":490},[],[492],{"type":33,"value":493},"const uint8_t *",{"type":27,"tag":388,"props":495,"children":496},{},[497,499,505,507,512,514,520,522,528],{"type":33,"value":498},"Per-cap interaction semantic (",{"type":27,"tag":63,"props":500,"children":502},{"className":501},[],[503],{"type":33,"value":504},"legion_cap_semantic_t",{"type":33,"value":506},"), parallel to ",{"type":27,"tag":63,"props":508,"children":510},{"className":509},[],[511],{"type":33,"value":443},{"type":33,"value":513},"; ",{"type":27,"tag":63,"props":515,"children":517},{"className":516},[],[518],{"type":33,"value":519},"NULL",{"type":33,"value":521}," ⇒ all ",{"type":27,"tag":63,"props":523,"children":525},{"className":524},[],[526],{"type":33,"value":527},"UNSPECIFIED",{"type":33,"value":217},{"type":27,"tag":361,"props":530,"children":531},{},[532,548,556],{"type":27,"tag":388,"props":533,"children":534},{},[535,541,542],{"type":27,"tag":63,"props":536,"children":538},{"className":537},[],[539],{"type":33,"value":540},"required_caps",{"type":33,"value":445},{"type":27,"tag":63,"props":543,"children":545},{"className":544},[],[546],{"type":33,"value":547},"required_cap_count",{"type":27,"tag":388,"props":549,"children":550},{},[551],{"type":27,"tag":63,"props":552,"children":554},{"className":553},[],[555],{"type":33,"value":460},{"type":27,"tag":388,"props":557,"children":558},{},[559],{"type":33,"value":560},"Capabilities this module needs (lazy-resolved).",{"type":27,"tag":361,"props":562,"children":563},{},[564,580,589],{"type":27,"tag":388,"props":565,"children":566},{},[567,573,574],{"type":27,"tag":63,"props":568,"children":570},{"className":569},[],[571],{"type":33,"value":572},"methods",{"type":33,"value":445},{"type":27,"tag":63,"props":575,"children":577},{"className":576},[],[578],{"type":33,"value":579},"method_count",{"type":27,"tag":388,"props":581,"children":582},{},[583],{"type":27,"tag":63,"props":584,"children":586},{"className":585},[],[587],{"type":33,"value":588},"legion_module_method_decl_t *",{"type":27,"tag":388,"props":590,"children":591},{},[592],{"type":33,"value":593},"The methods the module exposes (below).",{"type":27,"tag":361,"props":595,"children":596},{},[597,606,615],{"type":27,"tag":388,"props":598,"children":599},{},[600],{"type":27,"tag":63,"props":601,"children":603},{"className":602},[],[604],{"type":33,"value":605},"handler",{"type":27,"tag":388,"props":607,"children":608},{},[609],{"type":27,"tag":63,"props":610,"children":612},{"className":611},[],[613],{"type":33,"value":614},"legion_module_handler_t",{"type":27,"tag":388,"props":616,"children":617},{},[618],{"type":33,"value":619},"The one function that services every method call.",{"type":27,"tag":361,"props":621,"children":622},{},[623,639,644],{"type":27,"tag":388,"props":624,"children":625},{},[626,632,633],{"type":27,"tag":63,"props":627,"children":629},{"className":628},[],[630],{"type":33,"value":631},"create",{"type":33,"value":445},{"type":27,"tag":63,"props":634,"children":636},{"className":635},[],[637],{"type":33,"value":638},"destroy",{"type":27,"tag":388,"props":640,"children":641},{},[642],{"type":33,"value":643},"fn ptrs",{"type":27,"tag":388,"props":645,"children":646},{},[647,649,655,657,663],{"type":33,"value":648},"Per-module instance lifecycle; ",{"type":27,"tag":63,"props":650,"children":652},{"className":651},[],[653],{"type":33,"value":654},"create(config)",{"type":33,"value":656}," returns opaque ",{"type":27,"tag":63,"props":658,"children":660},{"className":659},[],[661],{"type":33,"value":662},"module_data",{"type":33,"value":217},{"type":27,"tag":361,"props":665,"children":666},{},[667,676,681],{"type":27,"tag":388,"props":668,"children":669},{},[670],{"type":27,"tag":63,"props":671,"children":673},{"className":672},[],[674],{"type":33,"value":675},"prepare_mutation",{"type":27,"tag":388,"props":677,"children":678},{},[679],{"type":33,"value":680},"fn ptr",{"type":27,"tag":388,"props":682,"children":683},{},[684],{"type":33,"value":685},"Optional: inject deterministic values on the originator before a mutating call is broadcast to consensus.",{"type":27,"tag":361,"props":687,"children":688},{},[689,698,707],{"type":27,"tag":388,"props":690,"children":691},{},[692],{"type":27,"tag":63,"props":693,"children":695},{"className":694},[],[696],{"type":33,"value":697},"sync",{"type":27,"tag":388,"props":699,"children":700},{},[701],{"type":27,"tag":63,"props":702,"children":704},{"className":703},[],[705],{"type":33,"value":706},"legion_module_sync_t *",{"type":27,"tag":388,"props":708,"children":709},{},[710,712,717],{"type":33,"value":711},"Optional snapshot/restore for state that must survive epoch rollover / late-joiner sync (",{"type":27,"tag":63,"props":713,"children":715},{"className":714},[],[716],{"type":33,"value":519},{"type":33,"value":718}," if stateless).",{"type":27,"tag":361,"props":720,"children":721},{},[722,731,739],{"type":27,"tag":388,"props":723,"children":724},{},[725],{"type":27,"tag":63,"props":726,"children":728},{"className":727},[],[729],{"type":33,"value":730},"publisher_id",{"type":27,"tag":388,"props":732,"children":733},{},[734],{"type":27,"tag":63,"props":735,"children":737},{"className":736},[],[738],{"type":33,"value":412},{"type":27,"tag":388,"props":740,"children":741},{},[742,747],{"type":27,"tag":63,"props":743,"children":745},{"className":744},[],[746],{"type":33,"value":519},{"type":33,"value":748}," for built-ins.",{"type":27,"tag":361,"props":750,"children":751},{},[752,761,770],{"type":27,"tag":388,"props":753,"children":754},{},[755],{"type":27,"tag":63,"props":756,"children":758},{"className":757},[],[759],{"type":33,"value":760},"category",{"type":27,"tag":388,"props":762,"children":763},{},[764],{"type":27,"tag":63,"props":765,"children":767},{"className":766},[],[768],{"type":33,"value":769},"legion_module_category_t",{"type":27,"tag":388,"props":771,"children":772},{},[773,779,781,787],{"type":27,"tag":63,"props":774,"children":776},{"className":775},[],[777],{"type":33,"value":778},"LEGION_MODULE_SYSTEM",{"type":33,"value":780}," (compiled in) or ",{"type":27,"tag":63,"props":782,"children":784},{"className":783},[],[785],{"type":33,"value":786},"LEGION_MODULE_LOADABLE",{"type":33,"value":217},{"type":27,"tag":40,"props":789,"children":790},{},[791,796,798,804],{"type":27,"tag":44,"props":792,"children":793},{},[794],{"type":33,"value":795},"The handler",{"type":33,"value":797}," (",{"type":27,"tag":63,"props":799,"children":801},{"className":800},[],[802],{"type":33,"value":803},"sdk.h:176",{"type":33,"value":805},") — one function, dispatched for every method call,\nlocal or delegated:",{"type":27,"tag":219,"props":807,"children":809},{"className":221,"code":808,"language":223,"meta":21,"style":21},"int handler(const char *method_name, legion_map_t *params, int caller_tier,\n            void **result, size_t *result_len, void *plugin_data);\n",[810],{"type":27,"tag":63,"props":811,"children":812},{"__ignoreMap":21},[813,891],{"type":27,"tag":229,"props":814,"children":815},{"class":231,"line":11},[816,821,827,833,838,843,848,854,858,864,868,873,877,881,886],{"type":27,"tag":229,"props":817,"children":818},{"style":235},[819],{"type":33,"value":820},"int",{"type":27,"tag":229,"props":822,"children":824},{"style":823},"--shiki-default:#B392F0;--shiki-dark:#B392F0",[825],{"type":33,"value":826}," handler",{"type":27,"tag":229,"props":828,"children":830},{"style":829},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8",[831],{"type":33,"value":832},"(",{"type":27,"tag":229,"props":834,"children":835},{"style":235},[836],{"type":33,"value":837},"const",{"type":27,"tag":229,"props":839,"children":840},{"style":235},[841],{"type":33,"value":842}," char",{"type":27,"tag":229,"props":844,"children":845},{"style":235},[846],{"type":33,"value":847}," *",{"type":27,"tag":229,"props":849,"children":851},{"style":850},"--shiki-default:#FFAB70;--shiki-dark:#FFAB70",[852],{"type":33,"value":853},"method_name",{"type":27,"tag":229,"props":855,"children":856},{"style":829},[857],{"type":33,"value":122},{"type":27,"tag":229,"props":859,"children":861},{"style":860},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF",[862],{"type":33,"value":863},"legion_map_t",{"type":27,"tag":229,"props":865,"children":866},{"style":235},[867],{"type":33,"value":847},{"type":27,"tag":229,"props":869,"children":870},{"style":850},[871],{"type":33,"value":872},"params",{"type":27,"tag":229,"props":874,"children":875},{"style":829},[876],{"type":33,"value":122},{"type":27,"tag":229,"props":878,"children":879},{"style":235},[880],{"type":33,"value":820},{"type":27,"tag":229,"props":882,"children":883},{"style":850},[884],{"type":33,"value":885}," caller_tier",{"type":27,"tag":229,"props":887,"children":888},{"style":829},[889],{"type":33,"value":890},",\n",{"type":27,"tag":229,"props":892,"children":893},{"class":231,"line":7},[894,899,904,909,913,918,922,927,931,936,940,945],{"type":27,"tag":229,"props":895,"children":896},{"style":235},[897],{"type":33,"value":898},"            void",{"type":27,"tag":229,"props":900,"children":901},{"style":235},[902],{"type":33,"value":903}," **",{"type":27,"tag":229,"props":905,"children":906},{"style":850},[907],{"type":33,"value":908},"result",{"type":27,"tag":229,"props":910,"children":911},{"style":829},[912],{"type":33,"value":122},{"type":27,"tag":229,"props":914,"children":915},{"style":235},[916],{"type":33,"value":917},"size_t",{"type":27,"tag":229,"props":919,"children":920},{"style":235},[921],{"type":33,"value":847},{"type":27,"tag":229,"props":923,"children":924},{"style":850},[925],{"type":33,"value":926},"result_len",{"type":27,"tag":229,"props":928,"children":929},{"style":829},[930],{"type":33,"value":122},{"type":27,"tag":229,"props":932,"children":933},{"style":235},[934],{"type":33,"value":935},"void",{"type":27,"tag":229,"props":937,"children":938},{"style":235},[939],{"type":33,"value":847},{"type":27,"tag":229,"props":941,"children":942},{"style":850},[943],{"type":33,"value":944},"plugin_data",{"type":27,"tag":229,"props":946,"children":947},{"style":829},[948],{"type":33,"value":949},");\n",{"type":27,"tag":40,"props":951,"children":952},{},[953,955,961,963,969,971,977,979,985,987,992,994,999],{"type":33,"value":954},"Return ",{"type":27,"tag":63,"props":956,"children":958},{"className":957},[],[959],{"type":33,"value":960},"LEGION_OK",{"type":33,"value":962}," and optionally allocate ",{"type":27,"tag":63,"props":964,"children":966},{"className":965},[],[967],{"type":33,"value":968},"*result",{"type":33,"value":970}," (via ",{"type":27,"tag":63,"props":972,"children":974},{"className":973},[],[975],{"type":33,"value":976},"legion_pal->alloc",{"type":33,"value":978},";\nthe runtime frees it), or return a ",{"type":27,"tag":63,"props":980,"children":982},{"className":981},[],[983],{"type":33,"value":984},"LEGION_ERR_*",{"type":33,"value":986}," code and leave ",{"type":27,"tag":63,"props":988,"children":990},{"className":989},[],[991],{"type":33,"value":968},{"type":33,"value":993}," unset.\nHandlers may run ",{"type":27,"tag":44,"props":995,"children":996},{},[997],{"type":33,"value":998},"concurrently",{"type":33,"value":1000}," — synchronise your own module state.",{"type":27,"tag":40,"props":1002,"children":1003},{},[1004,1009,1010,1016,1017,1023],{"type":27,"tag":44,"props":1005,"children":1006},{},[1007],{"type":33,"value":1008},"A method declaration",{"type":33,"value":797},{"type":27,"tag":63,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":33,"value":1015},"legion_module_method_decl_t",{"type":33,"value":122},{"type":27,"tag":63,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":33,"value":1022},"sdk.h:112",{"type":33,"value":1024},") tells the\nruntime how to treat each method:",{"type":27,"tag":353,"props":1026,"children":1027},{},[1028,1043],{"type":27,"tag":357,"props":1029,"children":1030},{},[1031],{"type":27,"tag":361,"props":1032,"children":1033},{},[1034,1038],{"type":27,"tag":365,"props":1035,"children":1036},{},[1037],{"type":33,"value":369},{"type":27,"tag":365,"props":1039,"children":1040},{},[1041],{"type":33,"value":1042},"Meaning",{"type":27,"tag":381,"props":1044,"children":1045},{},[1046,1076,1106,1128,1150,1183,1206,1237,1260],{"type":27,"tag":361,"props":1047,"children":1048},{},[1049,1057],{"type":27,"tag":388,"props":1050,"children":1051},{},[1052],{"type":27,"tag":63,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":33,"value":396},{"type":27,"tag":388,"props":1058,"children":1059},{},[1060,1062,1068,1069,1075],{"type":33,"value":1061},"Method name (",{"type":27,"tag":63,"props":1063,"children":1065},{"className":1064},[],[1066],{"type":33,"value":1067},"\"get\"",{"type":33,"value":122},{"type":27,"tag":63,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":33,"value":1074},"\"set\"",{"type":33,"value":324},{"type":27,"tag":361,"props":1077,"children":1078},{},[1079,1088],{"type":27,"tag":388,"props":1080,"children":1081},{},[1082],{"type":27,"tag":63,"props":1083,"children":1085},{"className":1084},[],[1086],{"type":33,"value":1087},"mutates_state",{"type":27,"tag":388,"props":1089,"children":1090},{},[1091,1097,1099,1104],{"type":27,"tag":63,"props":1092,"children":1094},{"className":1093},[],[1095],{"type":33,"value":1096},"true",{"type":33,"value":1098}," → routed through ",{"type":27,"tag":44,"props":1100,"children":1101},{},[1102],{"type":33,"value":1103},"consensus",{"type":33,"value":1105}," (so all cohort replicas apply it).",{"type":27,"tag":361,"props":1107,"children":1108},{},[1109,1118],{"type":27,"tag":388,"props":1110,"children":1111},{},[1112],{"type":27,"tag":63,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":33,"value":1117},"delegatable",{"type":27,"tag":388,"props":1119,"children":1120},{},[1121,1126],{"type":27,"tag":63,"props":1122,"children":1124},{"className":1123},[],[1125],{"type":33,"value":1096},{"type":33,"value":1127}," → may execute on a peer that advertises the cap.",{"type":27,"tag":361,"props":1129,"children":1130},{},[1131,1140],{"type":27,"tag":388,"props":1132,"children":1133},{},[1134],{"type":27,"tag":63,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":33,"value":1139},"requires_consent",{"type":27,"tag":388,"props":1141,"children":1142},{},[1143,1148],{"type":27,"tag":63,"props":1144,"children":1146},{"className":1145},[],[1147],{"type":33,"value":1096},{"type":33,"value":1149}," → needs user approval at tier 0.",{"type":27,"tag":361,"props":1151,"children":1152},{},[1153,1162],{"type":27,"tag":388,"props":1154,"children":1155},{},[1156],{"type":27,"tag":63,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":33,"value":1161},"min_tier",{"type":27,"tag":388,"props":1163,"children":1164},{},[1165,1167,1173,1175,1181],{"type":33,"value":1166},"Minimum privilege tier (",{"type":27,"tag":63,"props":1168,"children":1170},{"className":1169},[],[1171],{"type":33,"value":1172},"0",{"type":33,"value":1174},"=sovereign … ",{"type":27,"tag":63,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":33,"value":1180},"3",{"type":33,"value":1182},"=interface).",{"type":27,"tag":361,"props":1184,"children":1185},{},[1186,1195],{"type":27,"tag":388,"props":1187,"children":1188},{},[1189],{"type":27,"tag":63,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":33,"value":1194},"required_cap",{"type":27,"tag":388,"props":1196,"children":1197},{},[1198,1200,1205],{"type":33,"value":1199},"Capability the caller must hold (or ",{"type":27,"tag":63,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":33,"value":519},{"type":33,"value":324},{"type":27,"tag":361,"props":1207,"children":1208},{},[1209,1225],{"type":27,"tag":388,"props":1210,"children":1211},{},[1212,1218,1219],{"type":27,"tag":63,"props":1213,"children":1215},{"className":1214},[],[1216],{"type":33,"value":1217},"delegation_timeout_ms",{"type":33,"value":445},{"type":27,"tag":63,"props":1220,"children":1222},{"className":1221},[],[1223],{"type":33,"value":1224},"max_delegation_retries",{"type":27,"tag":388,"props":1226,"children":1227},{},[1228,1230,1235],{"type":33,"value":1229},"Per-method overrides (",{"type":27,"tag":63,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":33,"value":1172},{"type":33,"value":1236}," = defaults: 10 000 ms / 2 retries).",{"type":27,"tag":361,"props":1238,"children":1239},{},[1240,1255],{"type":27,"tag":388,"props":1241,"children":1242},{},[1243,1248,1249],{"type":27,"tag":63,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":33,"value":872},{"type":33,"value":445},{"type":27,"tag":63,"props":1250,"children":1252},{"className":1251},[],[1253],{"type":33,"value":1254},"param_count",{"type":27,"tag":388,"props":1256,"children":1257},{},[1258],{"type":33,"value":1259},"Parameter metadata (for LLM tool-surfacing + the delegation scan).",{"type":27,"tag":361,"props":1261,"children":1262},{},[1263,1279],{"type":27,"tag":388,"props":1264,"children":1265},{},[1266,1272,1273],{"type":27,"tag":63,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":33,"value":1271},"description",{"type":33,"value":445},{"type":27,"tag":63,"props":1274,"children":1276},{"className":1275},[],[1277],{"type":33,"value":1278},"return_type",{"type":27,"tag":388,"props":1280,"children":1281},{},[1282],{"type":33,"value":1283},"Human/LLM-facing docs.",{"type":27,"tag":83,"props":1285,"children":1287},{"id":1286},"worked-example-a-minimal-capability-providing-module",[1288],{"type":33,"value":1289},"Worked example — a minimal capability-providing module",{"type":27,"tag":40,"props":1291,"children":1292},{},[1293,1295,1301,1303,1309,1311,1317,1319,1325,1327,1333],{"type":33,"value":1294},"This is the real, tested fixture ",{"type":27,"tag":63,"props":1296,"children":1298},{"className":1297},[],[1299],{"type":33,"value":1300},"src/sdk_demo/sdk_demo_module.c",{"type":33,"value":1302}," (the smallest\nmodule that proves the full ",{"type":27,"tag":63,"props":1304,"children":1306},{"className":1305},[],[1307],{"type":33,"value":1308},"dlopen",{"type":33,"value":1310}," + signed-manifest + L3-KV path). It provides\nthe capability ",{"type":27,"tag":63,"props":1312,"children":1314},{"className":1313},[],[1315],{"type":33,"value":1316},"sdk_demo.test",{"type":33,"value":1318}," with two methods: ",{"type":27,"tag":63,"props":1320,"children":1322},{"className":1321},[],[1323],{"type":33,"value":1324},"noop",{"type":33,"value":1326}," (non-mutating) and\n",{"type":27,"tag":63,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":33,"value":1332},"set_pair",{"type":33,"value":1334}," (mutating, writes through the L3 KV wrapper).",{"type":27,"tag":219,"props":1336,"children":1338},{"className":221,"code":1337,"language":223,"meta":21,"style":21},"#include \"legion/sdk.h\"\n#include \"legion/legion_pal.h\"\n#include \u003Cstring.h>\n\n/* Per-instance data. pm is wired in at init so a mutating handler can reach\n * the L3 KV wrapper. */\ntypedef struct { legion_plugin_manager_t *pm; } sdk_demo_data_t;\n\nstatic void *sdk_demo_create(legion_map_t *config) {\n    (void)config;\n    sdk_demo_data_t *d = legion_pal->alloc(sizeof(*d));\n    if (d) d->pm = NULL;\n    return d;\n}\nstatic void sdk_demo_destroy(void *data) { if (data) legion_pal->free(data); }\n\n/* A non-mutating method: allocate the result with the PAL allocator. */\nstatic int sdk_demo_noop(void **result, size_t *result_len) {\n    char *r = legion_pal->alloc(3);\n    if (!r) return LEGION_ERR_NOMEM;\n    memcpy(r, \"ok\", 3);\n    *result = r; *result_len = 3;\n    return LEGION_OK;\n}\n\n/* A mutating method: store (key,value) via the L3 KV wrapper. */\nstatic int sdk_demo_set_pair(sdk_demo_data_t *d, legion_map_t *params, int caller_tier) {\n    if (!d || !d->pm || !params) return LEGION_ERR_INVALID_ARG;\n    size_t klen = 0, vlen = 0;\n    const char *key   = legion_map_get(params, \"key\", &klen);\n    const void *value = legion_map_get(params, \"value\", &vlen);\n    if (!key || !klen || !value) return LEGION_ERR_INVALID_ARG;\n    return legion_l3_kv_set(d->pm, key, value, vlen, caller_tier);\n}\n\n/* The single handler routes by method name. */\nstatic int sdk_demo_handler(const char *method, legion_map_t *params, int caller_tier,\n                            void **result, size_t *result_len, void *plugin_data) {\n    sdk_demo_data_t *d = plugin_data;\n    if (!d) return LEGION_ERR_INTERNAL;\n    if (!strcmp(method, \"noop\"))     return sdk_demo_noop(result, result_len);\n    if (!strcmp(method, \"set_pair\")) return sdk_demo_set_pair(d, params, caller_tier);\n    return LEGION_ERR_NOT_FOUND;\n}\n\n/* Method + parameter metadata. */\nstatic const legion_method_param_t set_pair_params[] = {\n    { \"key\",   \"string\", \"Key to set\",  true },\n    { \"value\", \"bytes\",  \"Value bytes\", true },\n};\nstatic legion_module_method_decl_t sdk_demo_methods[] = {\n    { .name=\"noop\",     .mutates_state=false, .min_tier=3, .return_type=\"string\",\n      .description=\"Non-mutating no-op; returns \\\"ok\\\"\" },\n    { .name=\"set_pair\", .mutates_state=true,  .min_tier=3,\n      .params=set_pair_params, .param_count=2,\n      .description=\"Mutating: stores (key,value) via legion_l3_kv_set\" },\n};\n\n/* The capability this module provides — declaring it advertises it. */\nstatic const char *sdk_demo_provided_caps[] = { \"sdk_demo.test\" };\n\nconst legion_module_registration_t legion_module_sdk_demo_reg = {\n    .name = \"sdk_demo\", .version = \"0.1.0\",\n    .provided_caps = sdk_demo_provided_caps, .provided_cap_count = 1,\n    .methods = sdk_demo_methods, .method_count = 2,\n    .handler = sdk_demo_handler,\n    .create = sdk_demo_create, .destroy = sdk_demo_destroy,\n    .category = LEGION_MODULE_LOADABLE,\n};\n\n/* Loadable-module entry point (only when built as a .so). */\n#ifdef LEGION_BUILDING_LOADABLE_MODULE\nint legion_module_init(legion_plugin_manager_t *pm) {\n    int rc = legion_module_register(pm, &legion_module_sdk_demo_reg);\n    if (rc != LEGION_OK) return rc;\n    sdk_demo_data_t *d = legion_plugin_get_module_data(pm, \"sdk_demo\");\n    if (d) d->pm = pm;          /* wire pm so set_pair can use the KV wrapper */\n    return LEGION_OK;\n}\nvoid legion_module_fini(void) {}\n#endif\n",[1339],{"type":27,"tag":63,"props":1340,"children":1341},{"__ignoreMap":21},[1342,1354,1366,1378,1387,1396,1405,1448,1456,1501,1519,1575,1602,1616,1625,1684,1692,1701,1755,1797,1829,1860,1905,1918,1926,1934,1943,2009,2066,2106,2161,2212,2267,2285,2293,2301,2310,2380,2433,2458,2488,2537,2584,2597,2605,2613,2622,2660,2706,2748,2757,2787,2848,2889,2935,2966,2987,2995,3003,3012,3059,3067,3093,3129,3160,3191,3209,3236,3254,3262,3270,3279,3293,3327,3364,3396,3434,3460,3472,3480,3506],{"type":27,"tag":229,"props":1343,"children":1344},{"class":231,"line":11},[1345,1349],{"type":27,"tag":229,"props":1346,"children":1347},{"style":235},[1348],{"type":33,"value":238},{"type":27,"tag":229,"props":1350,"children":1351},{"style":241},[1352],{"type":33,"value":1353}," \"legion/sdk.h\"\n",{"type":27,"tag":229,"props":1355,"children":1356},{"class":231,"line":7},[1357,1361],{"type":27,"tag":229,"props":1358,"children":1359},{"style":235},[1360],{"type":33,"value":238},{"type":27,"tag":229,"props":1362,"children":1363},{"style":241},[1364],{"type":33,"value":1365}," \"legion/legion_pal.h\"\n",{"type":27,"tag":229,"props":1367,"children":1368},{"class":231,"line":15},[1369,1373],{"type":27,"tag":229,"props":1370,"children":1371},{"style":235},[1372],{"type":33,"value":238},{"type":27,"tag":229,"props":1374,"children":1375},{"style":241},[1376],{"type":33,"value":1377}," \u003Cstring.h>\n",{"type":27,"tag":229,"props":1379,"children":1380},{"class":231,"line":19},[1381],{"type":27,"tag":229,"props":1382,"children":1384},{"emptyLinePlaceholder":1383},true,[1385],{"type":33,"value":1386},"\n",{"type":27,"tag":229,"props":1388,"children":1390},{"class":231,"line":1389},5,[1391],{"type":27,"tag":229,"props":1392,"children":1393},{"style":247},[1394],{"type":33,"value":1395},"/* Per-instance data. pm is wired in at init so a mutating handler can reach\n",{"type":27,"tag":229,"props":1397,"children":1399},{"class":231,"line":1398},6,[1400],{"type":27,"tag":229,"props":1401,"children":1402},{"style":247},[1403],{"type":33,"value":1404}," * the L3 KV wrapper. */\n",{"type":27,"tag":229,"props":1406,"children":1408},{"class":231,"line":1407},7,[1409,1414,1419,1424,1429,1433,1438,1443],{"type":27,"tag":229,"props":1410,"children":1411},{"style":235},[1412],{"type":33,"value":1413},"typedef",{"type":27,"tag":229,"props":1415,"children":1416},{"style":235},[1417],{"type":33,"value":1418}," struct",{"type":27,"tag":229,"props":1420,"children":1421},{"style":829},[1422],{"type":33,"value":1423}," { ",{"type":27,"tag":229,"props":1425,"children":1426},{"style":860},[1427],{"type":33,"value":1428},"legion_plugin_manager_t",{"type":27,"tag":229,"props":1430,"children":1431},{"style":235},[1432],{"type":33,"value":847},{"type":27,"tag":229,"props":1434,"children":1435},{"style":829},[1436],{"type":33,"value":1437},"pm; } ",{"type":27,"tag":229,"props":1439,"children":1440},{"style":860},[1441],{"type":33,"value":1442},"sdk_demo_data_t",{"type":27,"tag":229,"props":1444,"children":1445},{"style":829},[1446],{"type":33,"value":1447},";\n",{"type":27,"tag":229,"props":1449,"children":1451},{"class":231,"line":1450},8,[1452],{"type":27,"tag":229,"props":1453,"children":1454},{"emptyLinePlaceholder":1383},[1455],{"type":33,"value":1386},{"type":27,"tag":229,"props":1457,"children":1459},{"class":231,"line":1458},9,[1460,1465,1470,1474,1479,1483,1487,1491,1496],{"type":27,"tag":229,"props":1461,"children":1462},{"style":235},[1463],{"type":33,"value":1464},"static",{"type":27,"tag":229,"props":1466,"children":1467},{"style":235},[1468],{"type":33,"value":1469}," void",{"type":27,"tag":229,"props":1471,"children":1472},{"style":235},[1473],{"type":33,"value":847},{"type":27,"tag":229,"props":1475,"children":1476},{"style":823},[1477],{"type":33,"value":1478},"sdk_demo_create",{"type":27,"tag":229,"props":1480,"children":1481},{"style":829},[1482],{"type":33,"value":832},{"type":27,"tag":229,"props":1484,"children":1485},{"style":860},[1486],{"type":33,"value":863},{"type":27,"tag":229,"props":1488,"children":1489},{"style":235},[1490],{"type":33,"value":847},{"type":27,"tag":229,"props":1492,"children":1493},{"style":850},[1494],{"type":33,"value":1495},"config",{"type":27,"tag":229,"props":1497,"children":1498},{"style":829},[1499],{"type":33,"value":1500},") {\n",{"type":27,"tag":229,"props":1502,"children":1504},{"class":231,"line":1503},10,[1505,1510,1514],{"type":27,"tag":229,"props":1506,"children":1507},{"style":829},[1508],{"type":33,"value":1509},"    (",{"type":27,"tag":229,"props":1511,"children":1512},{"style":235},[1513],{"type":33,"value":935},{"type":27,"tag":229,"props":1515,"children":1516},{"style":829},[1517],{"type":33,"value":1518},")config;\n",{"type":27,"tag":229,"props":1520,"children":1522},{"class":231,"line":1521},11,[1523,1528,1532,1537,1542,1547,1552,1556,1561,1565,1570],{"type":27,"tag":229,"props":1524,"children":1525},{"style":860},[1526],{"type":33,"value":1527},"    sdk_demo_data_t",{"type":27,"tag":229,"props":1529,"children":1530},{"style":235},[1531],{"type":33,"value":847},{"type":27,"tag":229,"props":1533,"children":1534},{"style":829},[1535],{"type":33,"value":1536},"d ",{"type":27,"tag":229,"props":1538,"children":1539},{"style":235},[1540],{"type":33,"value":1541},"=",{"type":27,"tag":229,"props":1543,"children":1544},{"style":829},[1545],{"type":33,"value":1546}," legion_pal->",{"type":27,"tag":229,"props":1548,"children":1549},{"style":823},[1550],{"type":33,"value":1551},"alloc",{"type":27,"tag":229,"props":1553,"children":1554},{"style":829},[1555],{"type":33,"value":832},{"type":27,"tag":229,"props":1557,"children":1558},{"style":235},[1559],{"type":33,"value":1560},"sizeof",{"type":27,"tag":229,"props":1562,"children":1563},{"style":829},[1564],{"type":33,"value":832},{"type":27,"tag":229,"props":1566,"children":1567},{"style":235},[1568],{"type":33,"value":1569},"*",{"type":27,"tag":229,"props":1571,"children":1572},{"style":829},[1573],{"type":33,"value":1574},"d));\n",{"type":27,"tag":229,"props":1576,"children":1578},{"class":231,"line":1577},12,[1579,1584,1589,1593,1598],{"type":27,"tag":229,"props":1580,"children":1581},{"style":235},[1582],{"type":33,"value":1583},"    if",{"type":27,"tag":229,"props":1585,"children":1586},{"style":829},[1587],{"type":33,"value":1588}," (d) d->pm ",{"type":27,"tag":229,"props":1590,"children":1591},{"style":235},[1592],{"type":33,"value":1541},{"type":27,"tag":229,"props":1594,"children":1595},{"style":860},[1596],{"type":33,"value":1597}," NULL",{"type":27,"tag":229,"props":1599,"children":1600},{"style":829},[1601],{"type":33,"value":1447},{"type":27,"tag":229,"props":1603,"children":1605},{"class":231,"line":1604},13,[1606,1611],{"type":27,"tag":229,"props":1607,"children":1608},{"style":235},[1609],{"type":33,"value":1610},"    return",{"type":27,"tag":229,"props":1612,"children":1613},{"style":829},[1614],{"type":33,"value":1615}," d;\n",{"type":27,"tag":229,"props":1617,"children":1619},{"class":231,"line":1618},14,[1620],{"type":27,"tag":229,"props":1621,"children":1622},{"style":829},[1623],{"type":33,"value":1624},"}\n",{"type":27,"tag":229,"props":1626,"children":1628},{"class":231,"line":1627},15,[1629,1633,1637,1642,1646,1650,1654,1659,1664,1669,1674,1679],{"type":27,"tag":229,"props":1630,"children":1631},{"style":235},[1632],{"type":33,"value":1464},{"type":27,"tag":229,"props":1634,"children":1635},{"style":235},[1636],{"type":33,"value":1469},{"type":27,"tag":229,"props":1638,"children":1639},{"style":823},[1640],{"type":33,"value":1641}," sdk_demo_destroy",{"type":27,"tag":229,"props":1643,"children":1644},{"style":829},[1645],{"type":33,"value":832},{"type":27,"tag":229,"props":1647,"children":1648},{"style":235},[1649],{"type":33,"value":935},{"type":27,"tag":229,"props":1651,"children":1652},{"style":235},[1653],{"type":33,"value":847},{"type":27,"tag":229,"props":1655,"children":1656},{"style":850},[1657],{"type":33,"value":1658},"data",{"type":27,"tag":229,"props":1660,"children":1661},{"style":829},[1662],{"type":33,"value":1663},") { ",{"type":27,"tag":229,"props":1665,"children":1666},{"style":235},[1667],{"type":33,"value":1668},"if",{"type":27,"tag":229,"props":1670,"children":1671},{"style":829},[1672],{"type":33,"value":1673}," (data) legion_pal->",{"type":27,"tag":229,"props":1675,"children":1676},{"style":823},[1677],{"type":33,"value":1678},"free",{"type":27,"tag":229,"props":1680,"children":1681},{"style":829},[1682],{"type":33,"value":1683},"(data); }\n",{"type":27,"tag":229,"props":1685,"children":1687},{"class":231,"line":1686},16,[1688],{"type":27,"tag":229,"props":1689,"children":1690},{"emptyLinePlaceholder":1383},[1691],{"type":33,"value":1386},{"type":27,"tag":229,"props":1693,"children":1695},{"class":231,"line":1694},17,[1696],{"type":27,"tag":229,"props":1697,"children":1698},{"style":247},[1699],{"type":33,"value":1700},"/* A non-mutating method: allocate the result with the PAL allocator. */\n",{"type":27,"tag":229,"props":1702,"children":1704},{"class":231,"line":1703},18,[1705,1709,1714,1719,1723,1727,1731,1735,1739,1743,1747,1751],{"type":27,"tag":229,"props":1706,"children":1707},{"style":235},[1708],{"type":33,"value":1464},{"type":27,"tag":229,"props":1710,"children":1711},{"style":235},[1712],{"type":33,"value":1713}," int",{"type":27,"tag":229,"props":1715,"children":1716},{"style":823},[1717],{"type":33,"value":1718}," sdk_demo_noop",{"type":27,"tag":229,"props":1720,"children":1721},{"style":829},[1722],{"type":33,"value":832},{"type":27,"tag":229,"props":1724,"children":1725},{"style":235},[1726],{"type":33,"value":935},{"type":27,"tag":229,"props":1728,"children":1729},{"style":235},[1730],{"type":33,"value":903},{"type":27,"tag":229,"props":1732,"children":1733},{"style":850},[1734],{"type":33,"value":908},{"type":27,"tag":229,"props":1736,"children":1737},{"style":829},[1738],{"type":33,"value":122},{"type":27,"tag":229,"props":1740,"children":1741},{"style":235},[1742],{"type":33,"value":917},{"type":27,"tag":229,"props":1744,"children":1745},{"style":235},[1746],{"type":33,"value":847},{"type":27,"tag":229,"props":1748,"children":1749},{"style":850},[1750],{"type":33,"value":926},{"type":27,"tag":229,"props":1752,"children":1753},{"style":829},[1754],{"type":33,"value":1500},{"type":27,"tag":229,"props":1756,"children":1758},{"class":231,"line":1757},19,[1759,1764,1768,1773,1777,1781,1785,1789,1793],{"type":27,"tag":229,"props":1760,"children":1761},{"style":235},[1762],{"type":33,"value":1763},"    char",{"type":27,"tag":229,"props":1765,"children":1766},{"style":235},[1767],{"type":33,"value":847},{"type":27,"tag":229,"props":1769,"children":1770},{"style":829},[1771],{"type":33,"value":1772},"r ",{"type":27,"tag":229,"props":1774,"children":1775},{"style":235},[1776],{"type":33,"value":1541},{"type":27,"tag":229,"props":1778,"children":1779},{"style":829},[1780],{"type":33,"value":1546},{"type":27,"tag":229,"props":1782,"children":1783},{"style":823},[1784],{"type":33,"value":1551},{"type":27,"tag":229,"props":1786,"children":1787},{"style":829},[1788],{"type":33,"value":832},{"type":27,"tag":229,"props":1790,"children":1791},{"style":860},[1792],{"type":33,"value":1180},{"type":27,"tag":229,"props":1794,"children":1795},{"style":829},[1796],{"type":33,"value":949},{"type":27,"tag":229,"props":1798,"children":1800},{"class":231,"line":1799},20,[1801,1805,1809,1814,1819,1824],{"type":27,"tag":229,"props":1802,"children":1803},{"style":235},[1804],{"type":33,"value":1583},{"type":27,"tag":229,"props":1806,"children":1807},{"style":829},[1808],{"type":33,"value":797},{"type":27,"tag":229,"props":1810,"children":1811},{"style":235},[1812],{"type":33,"value":1813},"!",{"type":27,"tag":229,"props":1815,"children":1816},{"style":829},[1817],{"type":33,"value":1818},"r) ",{"type":27,"tag":229,"props":1820,"children":1821},{"style":235},[1822],{"type":33,"value":1823},"return",{"type":27,"tag":229,"props":1825,"children":1826},{"style":829},[1827],{"type":33,"value":1828}," LEGION_ERR_NOMEM;\n",{"type":27,"tag":229,"props":1830,"children":1832},{"class":231,"line":1831},21,[1833,1838,1843,1848,1852,1856],{"type":27,"tag":229,"props":1834,"children":1835},{"style":823},[1836],{"type":33,"value":1837},"    memcpy",{"type":27,"tag":229,"props":1839,"children":1840},{"style":829},[1841],{"type":33,"value":1842},"(r, ",{"type":27,"tag":229,"props":1844,"children":1845},{"style":241},[1846],{"type":33,"value":1847},"\"ok\"",{"type":27,"tag":229,"props":1849,"children":1850},{"style":829},[1851],{"type":33,"value":122},{"type":27,"tag":229,"props":1853,"children":1854},{"style":860},[1855],{"type":33,"value":1180},{"type":27,"tag":229,"props":1857,"children":1858},{"style":829},[1859],{"type":33,"value":949},{"type":27,"tag":229,"props":1861,"children":1863},{"class":231,"line":1862},22,[1864,1869,1874,1878,1883,1887,1892,1896,1901],{"type":27,"tag":229,"props":1865,"children":1866},{"style":235},[1867],{"type":33,"value":1868},"    *",{"type":27,"tag":229,"props":1870,"children":1871},{"style":829},[1872],{"type":33,"value":1873},"result ",{"type":27,"tag":229,"props":1875,"children":1876},{"style":235},[1877],{"type":33,"value":1541},{"type":27,"tag":229,"props":1879,"children":1880},{"style":829},[1881],{"type":33,"value":1882}," r; ",{"type":27,"tag":229,"props":1884,"children":1885},{"style":235},[1886],{"type":33,"value":1569},{"type":27,"tag":229,"props":1888,"children":1889},{"style":829},[1890],{"type":33,"value":1891},"result_len ",{"type":27,"tag":229,"props":1893,"children":1894},{"style":235},[1895],{"type":33,"value":1541},{"type":27,"tag":229,"props":1897,"children":1898},{"style":860},[1899],{"type":33,"value":1900}," 3",{"type":27,"tag":229,"props":1902,"children":1903},{"style":829},[1904],{"type":33,"value":1447},{"type":27,"tag":229,"props":1906,"children":1908},{"class":231,"line":1907},23,[1909,1913],{"type":27,"tag":229,"props":1910,"children":1911},{"style":235},[1912],{"type":33,"value":1610},{"type":27,"tag":229,"props":1914,"children":1915},{"style":829},[1916],{"type":33,"value":1917}," LEGION_OK;\n",{"type":27,"tag":229,"props":1919,"children":1921},{"class":231,"line":1920},24,[1922],{"type":27,"tag":229,"props":1923,"children":1924},{"style":829},[1925],{"type":33,"value":1624},{"type":27,"tag":229,"props":1927,"children":1929},{"class":231,"line":1928},25,[1930],{"type":27,"tag":229,"props":1931,"children":1932},{"emptyLinePlaceholder":1383},[1933],{"type":33,"value":1386},{"type":27,"tag":229,"props":1935,"children":1937},{"class":231,"line":1936},26,[1938],{"type":27,"tag":229,"props":1939,"children":1940},{"style":247},[1941],{"type":33,"value":1942},"/* A mutating method: store (key,value) via the L3 KV wrapper. */\n",{"type":27,"tag":229,"props":1944,"children":1946},{"class":231,"line":1945},27,[1947,1951,1955,1960,1964,1968,1972,1977,1981,1985,1989,1993,1997,2001,2005],{"type":27,"tag":229,"props":1948,"children":1949},{"style":235},[1950],{"type":33,"value":1464},{"type":27,"tag":229,"props":1952,"children":1953},{"style":235},[1954],{"type":33,"value":1713},{"type":27,"tag":229,"props":1956,"children":1957},{"style":823},[1958],{"type":33,"value":1959}," sdk_demo_set_pair",{"type":27,"tag":229,"props":1961,"children":1962},{"style":829},[1963],{"type":33,"value":832},{"type":27,"tag":229,"props":1965,"children":1966},{"style":860},[1967],{"type":33,"value":1442},{"type":27,"tag":229,"props":1969,"children":1970},{"style":235},[1971],{"type":33,"value":847},{"type":27,"tag":229,"props":1973,"children":1974},{"style":850},[1975],{"type":33,"value":1976},"d",{"type":27,"tag":229,"props":1978,"children":1979},{"style":829},[1980],{"type":33,"value":122},{"type":27,"tag":229,"props":1982,"children":1983},{"style":860},[1984],{"type":33,"value":863},{"type":27,"tag":229,"props":1986,"children":1987},{"style":235},[1988],{"type":33,"value":847},{"type":27,"tag":229,"props":1990,"children":1991},{"style":850},[1992],{"type":33,"value":872},{"type":27,"tag":229,"props":1994,"children":1995},{"style":829},[1996],{"type":33,"value":122},{"type":27,"tag":229,"props":1998,"children":1999},{"style":235},[2000],{"type":33,"value":820},{"type":27,"tag":229,"props":2002,"children":2003},{"style":850},[2004],{"type":33,"value":885},{"type":27,"tag":229,"props":2006,"children":2007},{"style":829},[2008],{"type":33,"value":1500},{"type":27,"tag":229,"props":2010,"children":2012},{"class":231,"line":2011},28,[2013,2017,2021,2025,2029,2034,2039,2044,2048,2052,2057,2061],{"type":27,"tag":229,"props":2014,"children":2015},{"style":235},[2016],{"type":33,"value":1583},{"type":27,"tag":229,"props":2018,"children":2019},{"style":829},[2020],{"type":33,"value":797},{"type":27,"tag":229,"props":2022,"children":2023},{"style":235},[2024],{"type":33,"value":1813},{"type":27,"tag":229,"props":2026,"children":2027},{"style":829},[2028],{"type":33,"value":1536},{"type":27,"tag":229,"props":2030,"children":2031},{"style":235},[2032],{"type":33,"value":2033},"||",{"type":27,"tag":229,"props":2035,"children":2036},{"style":235},[2037],{"type":33,"value":2038}," !",{"type":27,"tag":229,"props":2040,"children":2041},{"style":829},[2042],{"type":33,"value":2043},"d->pm ",{"type":27,"tag":229,"props":2045,"children":2046},{"style":235},[2047],{"type":33,"value":2033},{"type":27,"tag":229,"props":2049,"children":2050},{"style":235},[2051],{"type":33,"value":2038},{"type":27,"tag":229,"props":2053,"children":2054},{"style":829},[2055],{"type":33,"value":2056},"params) ",{"type":27,"tag":229,"props":2058,"children":2059},{"style":235},[2060],{"type":33,"value":1823},{"type":27,"tag":229,"props":2062,"children":2063},{"style":829},[2064],{"type":33,"value":2065}," LEGION_ERR_INVALID_ARG;\n",{"type":27,"tag":229,"props":2067,"children":2069},{"class":231,"line":2068},29,[2070,2075,2080,2084,2089,2094,2098,2102],{"type":27,"tag":229,"props":2071,"children":2072},{"style":235},[2073],{"type":33,"value":2074},"    size_t",{"type":27,"tag":229,"props":2076,"children":2077},{"style":829},[2078],{"type":33,"value":2079}," klen ",{"type":27,"tag":229,"props":2081,"children":2082},{"style":235},[2083],{"type":33,"value":1541},{"type":27,"tag":229,"props":2085,"children":2086},{"style":860},[2087],{"type":33,"value":2088}," 0",{"type":27,"tag":229,"props":2090,"children":2091},{"style":829},[2092],{"type":33,"value":2093},", vlen ",{"type":27,"tag":229,"props":2095,"children":2096},{"style":235},[2097],{"type":33,"value":1541},{"type":27,"tag":229,"props":2099,"children":2100},{"style":860},[2101],{"type":33,"value":2088},{"type":27,"tag":229,"props":2103,"children":2104},{"style":829},[2105],{"type":33,"value":1447},{"type":27,"tag":229,"props":2107,"children":2109},{"class":231,"line":2108},30,[2110,2115,2119,2123,2128,2132,2137,2142,2147,2151,2156],{"type":27,"tag":229,"props":2111,"children":2112},{"style":235},[2113],{"type":33,"value":2114},"    const",{"type":27,"tag":229,"props":2116,"children":2117},{"style":235},[2118],{"type":33,"value":842},{"type":27,"tag":229,"props":2120,"children":2121},{"style":235},[2122],{"type":33,"value":847},{"type":27,"tag":229,"props":2124,"children":2125},{"style":829},[2126],{"type":33,"value":2127},"key   ",{"type":27,"tag":229,"props":2129,"children":2130},{"style":235},[2131],{"type":33,"value":1541},{"type":27,"tag":229,"props":2133,"children":2134},{"style":823},[2135],{"type":33,"value":2136}," legion_map_get",{"type":27,"tag":229,"props":2138,"children":2139},{"style":829},[2140],{"type":33,"value":2141},"(params, ",{"type":27,"tag":229,"props":2143,"children":2144},{"style":241},[2145],{"type":33,"value":2146},"\"key\"",{"type":27,"tag":229,"props":2148,"children":2149},{"style":829},[2150],{"type":33,"value":122},{"type":27,"tag":229,"props":2152,"children":2153},{"style":235},[2154],{"type":33,"value":2155},"&",{"type":27,"tag":229,"props":2157,"children":2158},{"style":829},[2159],{"type":33,"value":2160},"klen);\n",{"type":27,"tag":229,"props":2162,"children":2164},{"class":231,"line":2163},31,[2165,2169,2173,2177,2182,2186,2190,2194,2199,2203,2207],{"type":27,"tag":229,"props":2166,"children":2167},{"style":235},[2168],{"type":33,"value":2114},{"type":27,"tag":229,"props":2170,"children":2171},{"style":235},[2172],{"type":33,"value":1469},{"type":27,"tag":229,"props":2174,"children":2175},{"style":235},[2176],{"type":33,"value":847},{"type":27,"tag":229,"props":2178,"children":2179},{"style":829},[2180],{"type":33,"value":2181},"value ",{"type":27,"tag":229,"props":2183,"children":2184},{"style":235},[2185],{"type":33,"value":1541},{"type":27,"tag":229,"props":2187,"children":2188},{"style":823},[2189],{"type":33,"value":2136},{"type":27,"tag":229,"props":2191,"children":2192},{"style":829},[2193],{"type":33,"value":2141},{"type":27,"tag":229,"props":2195,"children":2196},{"style":241},[2197],{"type":33,"value":2198},"\"value\"",{"type":27,"tag":229,"props":2200,"children":2201},{"style":829},[2202],{"type":33,"value":122},{"type":27,"tag":229,"props":2204,"children":2205},{"style":235},[2206],{"type":33,"value":2155},{"type":27,"tag":229,"props":2208,"children":2209},{"style":829},[2210],{"type":33,"value":2211},"vlen);\n",{"type":27,"tag":229,"props":2213,"children":2215},{"class":231,"line":2214},32,[2216,2220,2224,2228,2233,2237,2241,2246,2250,2254,2259,2263],{"type":27,"tag":229,"props":2217,"children":2218},{"style":235},[2219],{"type":33,"value":1583},{"type":27,"tag":229,"props":2221,"children":2222},{"style":829},[2223],{"type":33,"value":797},{"type":27,"tag":229,"props":2225,"children":2226},{"style":235},[2227],{"type":33,"value":1813},{"type":27,"tag":229,"props":2229,"children":2230},{"style":829},[2231],{"type":33,"value":2232},"key ",{"type":27,"tag":229,"props":2234,"children":2235},{"style":235},[2236],{"type":33,"value":2033},{"type":27,"tag":229,"props":2238,"children":2239},{"style":235},[2240],{"type":33,"value":2038},{"type":27,"tag":229,"props":2242,"children":2243},{"style":829},[2244],{"type":33,"value":2245},"klen ",{"type":27,"tag":229,"props":2247,"children":2248},{"style":235},[2249],{"type":33,"value":2033},{"type":27,"tag":229,"props":2251,"children":2252},{"style":235},[2253],{"type":33,"value":2038},{"type":27,"tag":229,"props":2255,"children":2256},{"style":829},[2257],{"type":33,"value":2258},"value) ",{"type":27,"tag":229,"props":2260,"children":2261},{"style":235},[2262],{"type":33,"value":1823},{"type":27,"tag":229,"props":2264,"children":2265},{"style":829},[2266],{"type":33,"value":2065},{"type":27,"tag":229,"props":2268,"children":2270},{"class":231,"line":2269},33,[2271,2275,2280],{"type":27,"tag":229,"props":2272,"children":2273},{"style":235},[2274],{"type":33,"value":1610},{"type":27,"tag":229,"props":2276,"children":2277},{"style":823},[2278],{"type":33,"value":2279}," legion_l3_kv_set",{"type":27,"tag":229,"props":2281,"children":2282},{"style":829},[2283],{"type":33,"value":2284},"(d->pm, key, value, vlen, caller_tier);\n",{"type":27,"tag":229,"props":2286,"children":2288},{"class":231,"line":2287},34,[2289],{"type":27,"tag":229,"props":2290,"children":2291},{"style":829},[2292],{"type":33,"value":1624},{"type":27,"tag":229,"props":2294,"children":2296},{"class":231,"line":2295},35,[2297],{"type":27,"tag":229,"props":2298,"children":2299},{"emptyLinePlaceholder":1383},[2300],{"type":33,"value":1386},{"type":27,"tag":229,"props":2302,"children":2304},{"class":231,"line":2303},36,[2305],{"type":27,"tag":229,"props":2306,"children":2307},{"style":247},[2308],{"type":33,"value":2309},"/* The single handler routes by method name. */\n",{"type":27,"tag":229,"props":2311,"children":2313},{"class":231,"line":2312},37,[2314,2318,2322,2327,2331,2335,2339,2343,2348,2352,2356,2360,2364,2368,2372,2376],{"type":27,"tag":229,"props":2315,"children":2316},{"style":235},[2317],{"type":33,"value":1464},{"type":27,"tag":229,"props":2319,"children":2320},{"style":235},[2321],{"type":33,"value":1713},{"type":27,"tag":229,"props":2323,"children":2324},{"style":823},[2325],{"type":33,"value":2326}," sdk_demo_handler",{"type":27,"tag":229,"props":2328,"children":2329},{"style":829},[2330],{"type":33,"value":832},{"type":27,"tag":229,"props":2332,"children":2333},{"style":235},[2334],{"type":33,"value":837},{"type":27,"tag":229,"props":2336,"children":2337},{"style":235},[2338],{"type":33,"value":842},{"type":27,"tag":229,"props":2340,"children":2341},{"style":235},[2342],{"type":33,"value":847},{"type":27,"tag":229,"props":2344,"children":2345},{"style":850},[2346],{"type":33,"value":2347},"method",{"type":27,"tag":229,"props":2349,"children":2350},{"style":829},[2351],{"type":33,"value":122},{"type":27,"tag":229,"props":2353,"children":2354},{"style":860},[2355],{"type":33,"value":863},{"type":27,"tag":229,"props":2357,"children":2358},{"style":235},[2359],{"type":33,"value":847},{"type":27,"tag":229,"props":2361,"children":2362},{"style":850},[2363],{"type":33,"value":872},{"type":27,"tag":229,"props":2365,"children":2366},{"style":829},[2367],{"type":33,"value":122},{"type":27,"tag":229,"props":2369,"children":2370},{"style":235},[2371],{"type":33,"value":820},{"type":27,"tag":229,"props":2373,"children":2374},{"style":850},[2375],{"type":33,"value":885},{"type":27,"tag":229,"props":2377,"children":2378},{"style":829},[2379],{"type":33,"value":890},{"type":27,"tag":229,"props":2381,"children":2383},{"class":231,"line":2382},38,[2384,2389,2393,2397,2401,2405,2409,2413,2417,2421,2425,2429],{"type":27,"tag":229,"props":2385,"children":2386},{"style":235},[2387],{"type":33,"value":2388},"                            void",{"type":27,"tag":229,"props":2390,"children":2391},{"style":235},[2392],{"type":33,"value":903},{"type":27,"tag":229,"props":2394,"children":2395},{"style":850},[2396],{"type":33,"value":908},{"type":27,"tag":229,"props":2398,"children":2399},{"style":829},[2400],{"type":33,"value":122},{"type":27,"tag":229,"props":2402,"children":2403},{"style":235},[2404],{"type":33,"value":917},{"type":27,"tag":229,"props":2406,"children":2407},{"style":235},[2408],{"type":33,"value":847},{"type":27,"tag":229,"props":2410,"children":2411},{"style":850},[2412],{"type":33,"value":926},{"type":27,"tag":229,"props":2414,"children":2415},{"style":829},[2416],{"type":33,"value":122},{"type":27,"tag":229,"props":2418,"children":2419},{"style":235},[2420],{"type":33,"value":935},{"type":27,"tag":229,"props":2422,"children":2423},{"style":235},[2424],{"type":33,"value":847},{"type":27,"tag":229,"props":2426,"children":2427},{"style":850},[2428],{"type":33,"value":944},{"type":27,"tag":229,"props":2430,"children":2431},{"style":829},[2432],{"type":33,"value":1500},{"type":27,"tag":229,"props":2434,"children":2436},{"class":231,"line":2435},39,[2437,2441,2445,2449,2453],{"type":27,"tag":229,"props":2438,"children":2439},{"style":860},[2440],{"type":33,"value":1527},{"type":27,"tag":229,"props":2442,"children":2443},{"style":235},[2444],{"type":33,"value":847},{"type":27,"tag":229,"props":2446,"children":2447},{"style":829},[2448],{"type":33,"value":1536},{"type":27,"tag":229,"props":2450,"children":2451},{"style":235},[2452],{"type":33,"value":1541},{"type":27,"tag":229,"props":2454,"children":2455},{"style":829},[2456],{"type":33,"value":2457}," plugin_data;\n",{"type":27,"tag":229,"props":2459,"children":2461},{"class":231,"line":2460},40,[2462,2466,2470,2474,2479,2483],{"type":27,"tag":229,"props":2463,"children":2464},{"style":235},[2465],{"type":33,"value":1583},{"type":27,"tag":229,"props":2467,"children":2468},{"style":829},[2469],{"type":33,"value":797},{"type":27,"tag":229,"props":2471,"children":2472},{"style":235},[2473],{"type":33,"value":1813},{"type":27,"tag":229,"props":2475,"children":2476},{"style":829},[2477],{"type":33,"value":2478},"d) ",{"type":27,"tag":229,"props":2480,"children":2481},{"style":235},[2482],{"type":33,"value":1823},{"type":27,"tag":229,"props":2484,"children":2485},{"style":829},[2486],{"type":33,"value":2487}," LEGION_ERR_INTERNAL;\n",{"type":27,"tag":229,"props":2489,"children":2491},{"class":231,"line":2490},41,[2492,2496,2500,2504,2509,2514,2519,2524,2528,2532],{"type":27,"tag":229,"props":2493,"children":2494},{"style":235},[2495],{"type":33,"value":1583},{"type":27,"tag":229,"props":2497,"children":2498},{"style":829},[2499],{"type":33,"value":797},{"type":27,"tag":229,"props":2501,"children":2502},{"style":235},[2503],{"type":33,"value":1813},{"type":27,"tag":229,"props":2505,"children":2506},{"style":823},[2507],{"type":33,"value":2508},"strcmp",{"type":27,"tag":229,"props":2510,"children":2511},{"style":829},[2512],{"type":33,"value":2513},"(method, ",{"type":27,"tag":229,"props":2515,"children":2516},{"style":241},[2517],{"type":33,"value":2518},"\"noop\"",{"type":27,"tag":229,"props":2520,"children":2521},{"style":829},[2522],{"type":33,"value":2523},"))     ",{"type":27,"tag":229,"props":2525,"children":2526},{"style":235},[2527],{"type":33,"value":1823},{"type":27,"tag":229,"props":2529,"children":2530},{"style":823},[2531],{"type":33,"value":1718},{"type":27,"tag":229,"props":2533,"children":2534},{"style":829},[2535],{"type":33,"value":2536},"(result, result_len);\n",{"type":27,"tag":229,"props":2538,"children":2540},{"class":231,"line":2539},42,[2541,2545,2549,2553,2557,2561,2566,2571,2575,2579],{"type":27,"tag":229,"props":2542,"children":2543},{"style":235},[2544],{"type":33,"value":1583},{"type":27,"tag":229,"props":2546,"children":2547},{"style":829},[2548],{"type":33,"value":797},{"type":27,"tag":229,"props":2550,"children":2551},{"style":235},[2552],{"type":33,"value":1813},{"type":27,"tag":229,"props":2554,"children":2555},{"style":823},[2556],{"type":33,"value":2508},{"type":27,"tag":229,"props":2558,"children":2559},{"style":829},[2560],{"type":33,"value":2513},{"type":27,"tag":229,"props":2562,"children":2563},{"style":241},[2564],{"type":33,"value":2565},"\"set_pair\"",{"type":27,"tag":229,"props":2567,"children":2568},{"style":829},[2569],{"type":33,"value":2570},")) ",{"type":27,"tag":229,"props":2572,"children":2573},{"style":235},[2574],{"type":33,"value":1823},{"type":27,"tag":229,"props":2576,"children":2577},{"style":823},[2578],{"type":33,"value":1959},{"type":27,"tag":229,"props":2580,"children":2581},{"style":829},[2582],{"type":33,"value":2583},"(d, params, caller_tier);\n",{"type":27,"tag":229,"props":2585,"children":2587},{"class":231,"line":2586},43,[2588,2592],{"type":27,"tag":229,"props":2589,"children":2590},{"style":235},[2591],{"type":33,"value":1610},{"type":27,"tag":229,"props":2593,"children":2594},{"style":829},[2595],{"type":33,"value":2596}," LEGION_ERR_NOT_FOUND;\n",{"type":27,"tag":229,"props":2598,"children":2600},{"class":231,"line":2599},44,[2601],{"type":27,"tag":229,"props":2602,"children":2603},{"style":829},[2604],{"type":33,"value":1624},{"type":27,"tag":229,"props":2606,"children":2608},{"class":231,"line":2607},45,[2609],{"type":27,"tag":229,"props":2610,"children":2611},{"emptyLinePlaceholder":1383},[2612],{"type":33,"value":1386},{"type":27,"tag":229,"props":2614,"children":2616},{"class":231,"line":2615},46,[2617],{"type":27,"tag":229,"props":2618,"children":2619},{"style":247},[2620],{"type":33,"value":2621},"/* Method + parameter metadata. */\n",{"type":27,"tag":229,"props":2623,"children":2625},{"class":231,"line":2624},47,[2626,2630,2635,2640,2645,2650,2655],{"type":27,"tag":229,"props":2627,"children":2628},{"style":235},[2629],{"type":33,"value":1464},{"type":27,"tag":229,"props":2631,"children":2632},{"style":235},[2633],{"type":33,"value":2634}," const",{"type":27,"tag":229,"props":2636,"children":2637},{"style":860},[2638],{"type":33,"value":2639}," legion_method_param_t",{"type":27,"tag":229,"props":2641,"children":2642},{"style":829},[2643],{"type":33,"value":2644}," set_pair_params",{"type":27,"tag":229,"props":2646,"children":2647},{"style":235},[2648],{"type":33,"value":2649},"[]",{"type":27,"tag":229,"props":2651,"children":2652},{"style":235},[2653],{"type":33,"value":2654}," =",{"type":27,"tag":229,"props":2656,"children":2657},{"style":829},[2658],{"type":33,"value":2659}," {\n",{"type":27,"tag":229,"props":2661,"children":2663},{"class":231,"line":2662},48,[2664,2669,2673,2678,2683,2687,2692,2697,2701],{"type":27,"tag":229,"props":2665,"children":2666},{"style":829},[2667],{"type":33,"value":2668},"    { ",{"type":27,"tag":229,"props":2670,"children":2671},{"style":241},[2672],{"type":33,"value":2146},{"type":27,"tag":229,"props":2674,"children":2675},{"style":829},[2676],{"type":33,"value":2677},",   ",{"type":27,"tag":229,"props":2679,"children":2680},{"style":241},[2681],{"type":33,"value":2682},"\"string\"",{"type":27,"tag":229,"props":2684,"children":2685},{"style":829},[2686],{"type":33,"value":122},{"type":27,"tag":229,"props":2688,"children":2689},{"style":241},[2690],{"type":33,"value":2691},"\"Key to set\"",{"type":27,"tag":229,"props":2693,"children":2694},{"style":829},[2695],{"type":33,"value":2696},",  ",{"type":27,"tag":229,"props":2698,"children":2699},{"style":860},[2700],{"type":33,"value":1096},{"type":27,"tag":229,"props":2702,"children":2703},{"style":829},[2704],{"type":33,"value":2705}," },\n",{"type":27,"tag":229,"props":2707,"children":2709},{"class":231,"line":2708},49,[2710,2714,2718,2722,2727,2731,2736,2740,2744],{"type":27,"tag":229,"props":2711,"children":2712},{"style":829},[2713],{"type":33,"value":2668},{"type":27,"tag":229,"props":2715,"children":2716},{"style":241},[2717],{"type":33,"value":2198},{"type":27,"tag":229,"props":2719,"children":2720},{"style":829},[2721],{"type":33,"value":122},{"type":27,"tag":229,"props":2723,"children":2724},{"style":241},[2725],{"type":33,"value":2726},"\"bytes\"",{"type":27,"tag":229,"props":2728,"children":2729},{"style":829},[2730],{"type":33,"value":2696},{"type":27,"tag":229,"props":2732,"children":2733},{"style":241},[2734],{"type":33,"value":2735},"\"Value bytes\"",{"type":27,"tag":229,"props":2737,"children":2738},{"style":829},[2739],{"type":33,"value":122},{"type":27,"tag":229,"props":2741,"children":2742},{"style":860},[2743],{"type":33,"value":1096},{"type":27,"tag":229,"props":2745,"children":2746},{"style":829},[2747],{"type":33,"value":2705},{"type":27,"tag":229,"props":2749,"children":2751},{"class":231,"line":2750},50,[2752],{"type":27,"tag":229,"props":2753,"children":2754},{"style":829},[2755],{"type":33,"value":2756},"};\n",{"type":27,"tag":229,"props":2758,"children":2760},{"class":231,"line":2759},51,[2761,2765,2770,2775,2779,2783],{"type":27,"tag":229,"props":2762,"children":2763},{"style":235},[2764],{"type":33,"value":1464},{"type":27,"tag":229,"props":2766,"children":2767},{"style":860},[2768],{"type":33,"value":2769}," legion_module_method_decl_t",{"type":27,"tag":229,"props":2771,"children":2772},{"style":829},[2773],{"type":33,"value":2774}," sdk_demo_methods",{"type":27,"tag":229,"props":2776,"children":2777},{"style":235},[2778],{"type":33,"value":2649},{"type":27,"tag":229,"props":2780,"children":2781},{"style":235},[2782],{"type":33,"value":2654},{"type":27,"tag":229,"props":2784,"children":2785},{"style":829},[2786],{"type":33,"value":2659},{"type":27,"tag":229,"props":2788,"children":2790},{"class":231,"line":2789},52,[2791,2796,2800,2804,2809,2813,2818,2823,2827,2831,2836,2840,2844],{"type":27,"tag":229,"props":2792,"children":2793},{"style":829},[2794],{"type":33,"value":2795},"    { .name",{"type":27,"tag":229,"props":2797,"children":2798},{"style":235},[2799],{"type":33,"value":1541},{"type":27,"tag":229,"props":2801,"children":2802},{"style":241},[2803],{"type":33,"value":2518},{"type":27,"tag":229,"props":2805,"children":2806},{"style":829},[2807],{"type":33,"value":2808},",     .mutates_state",{"type":27,"tag":229,"props":2810,"children":2811},{"style":235},[2812],{"type":33,"value":1541},{"type":27,"tag":229,"props":2814,"children":2815},{"style":860},[2816],{"type":33,"value":2817},"false",{"type":27,"tag":229,"props":2819,"children":2820},{"style":829},[2821],{"type":33,"value":2822},", .min_tier",{"type":27,"tag":229,"props":2824,"children":2825},{"style":235},[2826],{"type":33,"value":1541},{"type":27,"tag":229,"props":2828,"children":2829},{"style":860},[2830],{"type":33,"value":1180},{"type":27,"tag":229,"props":2832,"children":2833},{"style":829},[2834],{"type":33,"value":2835},", .return_type",{"type":27,"tag":229,"props":2837,"children":2838},{"style":235},[2839],{"type":33,"value":1541},{"type":27,"tag":229,"props":2841,"children":2842},{"style":241},[2843],{"type":33,"value":2682},{"type":27,"tag":229,"props":2845,"children":2846},{"style":829},[2847],{"type":33,"value":890},{"type":27,"tag":229,"props":2849,"children":2851},{"class":231,"line":2850},53,[2852,2857,2861,2866,2871,2876,2880,2885],{"type":27,"tag":229,"props":2853,"children":2854},{"style":829},[2855],{"type":33,"value":2856},"      .description",{"type":27,"tag":229,"props":2858,"children":2859},{"style":235},[2860],{"type":33,"value":1541},{"type":27,"tag":229,"props":2862,"children":2863},{"style":241},[2864],{"type":33,"value":2865},"\"Non-mutating no-op; returns ",{"type":27,"tag":229,"props":2867,"children":2868},{"style":860},[2869],{"type":33,"value":2870},"\\\"",{"type":27,"tag":229,"props":2872,"children":2873},{"style":241},[2874],{"type":33,"value":2875},"ok",{"type":27,"tag":229,"props":2877,"children":2878},{"style":860},[2879],{"type":33,"value":2870},{"type":27,"tag":229,"props":2881,"children":2882},{"style":241},[2883],{"type":33,"value":2884},"\"",{"type":27,"tag":229,"props":2886,"children":2887},{"style":829},[2888],{"type":33,"value":2705},{"type":27,"tag":229,"props":2890,"children":2892},{"class":231,"line":2891},54,[2893,2897,2901,2905,2910,2914,2918,2923,2927,2931],{"type":27,"tag":229,"props":2894,"children":2895},{"style":829},[2896],{"type":33,"value":2795},{"type":27,"tag":229,"props":2898,"children":2899},{"style":235},[2900],{"type":33,"value":1541},{"type":27,"tag":229,"props":2902,"children":2903},{"style":241},[2904],{"type":33,"value":2565},{"type":27,"tag":229,"props":2906,"children":2907},{"style":829},[2908],{"type":33,"value":2909},", .mutates_state",{"type":27,"tag":229,"props":2911,"children":2912},{"style":235},[2913],{"type":33,"value":1541},{"type":27,"tag":229,"props":2915,"children":2916},{"style":860},[2917],{"type":33,"value":1096},{"type":27,"tag":229,"props":2919,"children":2920},{"style":829},[2921],{"type":33,"value":2922},",  .min_tier",{"type":27,"tag":229,"props":2924,"children":2925},{"style":235},[2926],{"type":33,"value":1541},{"type":27,"tag":229,"props":2928,"children":2929},{"style":860},[2930],{"type":33,"value":1180},{"type":27,"tag":229,"props":2932,"children":2933},{"style":829},[2934],{"type":33,"value":890},{"type":27,"tag":229,"props":2936,"children":2938},{"class":231,"line":2937},55,[2939,2944,2948,2953,2957,2962],{"type":27,"tag":229,"props":2940,"children":2941},{"style":829},[2942],{"type":33,"value":2943},"      .params",{"type":27,"tag":229,"props":2945,"children":2946},{"style":235},[2947],{"type":33,"value":1541},{"type":27,"tag":229,"props":2949,"children":2950},{"style":829},[2951],{"type":33,"value":2952},"set_pair_params, .param_count",{"type":27,"tag":229,"props":2954,"children":2955},{"style":235},[2956],{"type":33,"value":1541},{"type":27,"tag":229,"props":2958,"children":2959},{"style":860},[2960],{"type":33,"value":2961},"2",{"type":27,"tag":229,"props":2963,"children":2964},{"style":829},[2965],{"type":33,"value":890},{"type":27,"tag":229,"props":2967,"children":2969},{"class":231,"line":2968},56,[2970,2974,2978,2983],{"type":27,"tag":229,"props":2971,"children":2972},{"style":829},[2973],{"type":33,"value":2856},{"type":27,"tag":229,"props":2975,"children":2976},{"style":235},[2977],{"type":33,"value":1541},{"type":27,"tag":229,"props":2979,"children":2980},{"style":241},[2981],{"type":33,"value":2982},"\"Mutating: stores (key,value) via legion_l3_kv_set\"",{"type":27,"tag":229,"props":2984,"children":2985},{"style":829},[2986],{"type":33,"value":2705},{"type":27,"tag":229,"props":2988,"children":2990},{"class":231,"line":2989},57,[2991],{"type":27,"tag":229,"props":2992,"children":2993},{"style":829},[2994],{"type":33,"value":2756},{"type":27,"tag":229,"props":2996,"children":2998},{"class":231,"line":2997},58,[2999],{"type":27,"tag":229,"props":3000,"children":3001},{"emptyLinePlaceholder":1383},[3002],{"type":33,"value":1386},{"type":27,"tag":229,"props":3004,"children":3006},{"class":231,"line":3005},59,[3007],{"type":27,"tag":229,"props":3008,"children":3009},{"style":247},[3010],{"type":33,"value":3011},"/* The capability this module provides — declaring it advertises it. */\n",{"type":27,"tag":229,"props":3013,"children":3015},{"class":231,"line":3014},60,[3016,3020,3024,3028,3032,3037,3041,3045,3049,3054],{"type":27,"tag":229,"props":3017,"children":3018},{"style":235},[3019],{"type":33,"value":1464},{"type":27,"tag":229,"props":3021,"children":3022},{"style":235},[3023],{"type":33,"value":2634},{"type":27,"tag":229,"props":3025,"children":3026},{"style":235},[3027],{"type":33,"value":842},{"type":27,"tag":229,"props":3029,"children":3030},{"style":235},[3031],{"type":33,"value":847},{"type":27,"tag":229,"props":3033,"children":3034},{"style":829},[3035],{"type":33,"value":3036},"sdk_demo_provided_caps",{"type":27,"tag":229,"props":3038,"children":3039},{"style":235},[3040],{"type":33,"value":2649},{"type":27,"tag":229,"props":3042,"children":3043},{"style":235},[3044],{"type":33,"value":2654},{"type":27,"tag":229,"props":3046,"children":3047},{"style":829},[3048],{"type":33,"value":1423},{"type":27,"tag":229,"props":3050,"children":3051},{"style":241},[3052],{"type":33,"value":3053},"\"sdk_demo.test\"",{"type":27,"tag":229,"props":3055,"children":3056},{"style":829},[3057],{"type":33,"value":3058}," };\n",{"type":27,"tag":229,"props":3060,"children":3062},{"class":231,"line":3061},61,[3063],{"type":27,"tag":229,"props":3064,"children":3065},{"emptyLinePlaceholder":1383},[3066],{"type":33,"value":1386},{"type":27,"tag":229,"props":3068,"children":3070},{"class":231,"line":3069},62,[3071,3075,3080,3085,3089],{"type":27,"tag":229,"props":3072,"children":3073},{"style":235},[3074],{"type":33,"value":837},{"type":27,"tag":229,"props":3076,"children":3077},{"style":860},[3078],{"type":33,"value":3079}," legion_module_registration_t",{"type":27,"tag":229,"props":3081,"children":3082},{"style":829},[3083],{"type":33,"value":3084}," legion_module_sdk_demo_reg ",{"type":27,"tag":229,"props":3086,"children":3087},{"style":235},[3088],{"type":33,"value":1541},{"type":27,"tag":229,"props":3090,"children":3091},{"style":829},[3092],{"type":33,"value":2659},{"type":27,"tag":229,"props":3094,"children":3096},{"class":231,"line":3095},63,[3097,3102,3106,3111,3116,3120,3125],{"type":27,"tag":229,"props":3098,"children":3099},{"style":829},[3100],{"type":33,"value":3101},"    .name ",{"type":27,"tag":229,"props":3103,"children":3104},{"style":235},[3105],{"type":33,"value":1541},{"type":27,"tag":229,"props":3107,"children":3108},{"style":241},[3109],{"type":33,"value":3110}," \"sdk_demo\"",{"type":27,"tag":229,"props":3112,"children":3113},{"style":829},[3114],{"type":33,"value":3115},", .version ",{"type":27,"tag":229,"props":3117,"children":3118},{"style":235},[3119],{"type":33,"value":1541},{"type":27,"tag":229,"props":3121,"children":3122},{"style":241},[3123],{"type":33,"value":3124}," \"0.1.0\"",{"type":27,"tag":229,"props":3126,"children":3127},{"style":829},[3128],{"type":33,"value":890},{"type":27,"tag":229,"props":3130,"children":3132},{"class":231,"line":3131},64,[3133,3138,3142,3147,3151,3156],{"type":27,"tag":229,"props":3134,"children":3135},{"style":829},[3136],{"type":33,"value":3137},"    .provided_caps ",{"type":27,"tag":229,"props":3139,"children":3140},{"style":235},[3141],{"type":33,"value":1541},{"type":27,"tag":229,"props":3143,"children":3144},{"style":829},[3145],{"type":33,"value":3146}," sdk_demo_provided_caps, .provided_cap_count ",{"type":27,"tag":229,"props":3148,"children":3149},{"style":235},[3150],{"type":33,"value":1541},{"type":27,"tag":229,"props":3152,"children":3153},{"style":860},[3154],{"type":33,"value":3155}," 1",{"type":27,"tag":229,"props":3157,"children":3158},{"style":829},[3159],{"type":33,"value":890},{"type":27,"tag":229,"props":3161,"children":3163},{"class":231,"line":3162},65,[3164,3169,3173,3178,3182,3187],{"type":27,"tag":229,"props":3165,"children":3166},{"style":829},[3167],{"type":33,"value":3168},"    .methods ",{"type":27,"tag":229,"props":3170,"children":3171},{"style":235},[3172],{"type":33,"value":1541},{"type":27,"tag":229,"props":3174,"children":3175},{"style":829},[3176],{"type":33,"value":3177}," sdk_demo_methods, .method_count ",{"type":27,"tag":229,"props":3179,"children":3180},{"style":235},[3181],{"type":33,"value":1541},{"type":27,"tag":229,"props":3183,"children":3184},{"style":860},[3185],{"type":33,"value":3186}," 2",{"type":27,"tag":229,"props":3188,"children":3189},{"style":829},[3190],{"type":33,"value":890},{"type":27,"tag":229,"props":3192,"children":3194},{"class":231,"line":3193},66,[3195,3200,3204],{"type":27,"tag":229,"props":3196,"children":3197},{"style":829},[3198],{"type":33,"value":3199},"    .handler ",{"type":27,"tag":229,"props":3201,"children":3202},{"style":235},[3203],{"type":33,"value":1541},{"type":27,"tag":229,"props":3205,"children":3206},{"style":829},[3207],{"type":33,"value":3208}," sdk_demo_handler,\n",{"type":27,"tag":229,"props":3210,"children":3212},{"class":231,"line":3211},67,[3213,3218,3222,3227,3231],{"type":27,"tag":229,"props":3214,"children":3215},{"style":829},[3216],{"type":33,"value":3217},"    .create ",{"type":27,"tag":229,"props":3219,"children":3220},{"style":235},[3221],{"type":33,"value":1541},{"type":27,"tag":229,"props":3223,"children":3224},{"style":829},[3225],{"type":33,"value":3226}," sdk_demo_create, .destroy ",{"type":27,"tag":229,"props":3228,"children":3229},{"style":235},[3230],{"type":33,"value":1541},{"type":27,"tag":229,"props":3232,"children":3233},{"style":829},[3234],{"type":33,"value":3235}," sdk_demo_destroy,\n",{"type":27,"tag":229,"props":3237,"children":3239},{"class":231,"line":3238},68,[3240,3245,3249],{"type":27,"tag":229,"props":3241,"children":3242},{"style":829},[3243],{"type":33,"value":3244},"    .category ",{"type":27,"tag":229,"props":3246,"children":3247},{"style":235},[3248],{"type":33,"value":1541},{"type":27,"tag":229,"props":3250,"children":3251},{"style":829},[3252],{"type":33,"value":3253}," LEGION_MODULE_LOADABLE,\n",{"type":27,"tag":229,"props":3255,"children":3257},{"class":231,"line":3256},69,[3258],{"type":27,"tag":229,"props":3259,"children":3260},{"style":829},[3261],{"type":33,"value":2756},{"type":27,"tag":229,"props":3263,"children":3265},{"class":231,"line":3264},70,[3266],{"type":27,"tag":229,"props":3267,"children":3268},{"emptyLinePlaceholder":1383},[3269],{"type":33,"value":1386},{"type":27,"tag":229,"props":3271,"children":3273},{"class":231,"line":3272},71,[3274],{"type":27,"tag":229,"props":3275,"children":3276},{"style":247},[3277],{"type":33,"value":3278},"/* Loadable-module entry point (only when built as a .so). */\n",{"type":27,"tag":229,"props":3280,"children":3282},{"class":231,"line":3281},72,[3283,3288],{"type":27,"tag":229,"props":3284,"children":3285},{"style":235},[3286],{"type":33,"value":3287},"#ifdef",{"type":27,"tag":229,"props":3289,"children":3290},{"style":823},[3291],{"type":33,"value":3292}," LEGION_BUILDING_LOADABLE_MODULE\n",{"type":27,"tag":229,"props":3294,"children":3296},{"class":231,"line":3295},73,[3297,3301,3306,3310,3314,3318,3323],{"type":27,"tag":229,"props":3298,"children":3299},{"style":235},[3300],{"type":33,"value":820},{"type":27,"tag":229,"props":3302,"children":3303},{"style":823},[3304],{"type":33,"value":3305}," legion_module_init",{"type":27,"tag":229,"props":3307,"children":3308},{"style":829},[3309],{"type":33,"value":832},{"type":27,"tag":229,"props":3311,"children":3312},{"style":860},[3313],{"type":33,"value":1428},{"type":27,"tag":229,"props":3315,"children":3316},{"style":235},[3317],{"type":33,"value":847},{"type":27,"tag":229,"props":3319,"children":3320},{"style":850},[3321],{"type":33,"value":3322},"pm",{"type":27,"tag":229,"props":3324,"children":3325},{"style":829},[3326],{"type":33,"value":1500},{"type":27,"tag":229,"props":3328,"children":3330},{"class":231,"line":3329},74,[3331,3336,3341,3345,3350,3355,3359],{"type":27,"tag":229,"props":3332,"children":3333},{"style":235},[3334],{"type":33,"value":3335},"    int",{"type":27,"tag":229,"props":3337,"children":3338},{"style":829},[3339],{"type":33,"value":3340}," rc ",{"type":27,"tag":229,"props":3342,"children":3343},{"style":235},[3344],{"type":33,"value":1541},{"type":27,"tag":229,"props":3346,"children":3347},{"style":823},[3348],{"type":33,"value":3349}," legion_module_register",{"type":27,"tag":229,"props":3351,"children":3352},{"style":829},[3353],{"type":33,"value":3354},"(pm, ",{"type":27,"tag":229,"props":3356,"children":3357},{"style":235},[3358],{"type":33,"value":2155},{"type":27,"tag":229,"props":3360,"children":3361},{"style":829},[3362],{"type":33,"value":3363},"legion_module_sdk_demo_reg);\n",{"type":27,"tag":229,"props":3365,"children":3367},{"class":231,"line":3366},75,[3368,3372,3377,3382,3387,3391],{"type":27,"tag":229,"props":3369,"children":3370},{"style":235},[3371],{"type":33,"value":1583},{"type":27,"tag":229,"props":3373,"children":3374},{"style":829},[3375],{"type":33,"value":3376}," (rc ",{"type":27,"tag":229,"props":3378,"children":3379},{"style":235},[3380],{"type":33,"value":3381},"!=",{"type":27,"tag":229,"props":3383,"children":3384},{"style":829},[3385],{"type":33,"value":3386}," LEGION_OK) ",{"type":27,"tag":229,"props":3388,"children":3389},{"style":235},[3390],{"type":33,"value":1823},{"type":27,"tag":229,"props":3392,"children":3393},{"style":829},[3394],{"type":33,"value":3395}," rc;\n",{"type":27,"tag":229,"props":3397,"children":3399},{"class":231,"line":3398},76,[3400,3404,3408,3412,3416,3421,3425,3430],{"type":27,"tag":229,"props":3401,"children":3402},{"style":860},[3403],{"type":33,"value":1527},{"type":27,"tag":229,"props":3405,"children":3406},{"style":235},[3407],{"type":33,"value":847},{"type":27,"tag":229,"props":3409,"children":3410},{"style":829},[3411],{"type":33,"value":1536},{"type":27,"tag":229,"props":3413,"children":3414},{"style":235},[3415],{"type":33,"value":1541},{"type":27,"tag":229,"props":3417,"children":3418},{"style":823},[3419],{"type":33,"value":3420}," legion_plugin_get_module_data",{"type":27,"tag":229,"props":3422,"children":3423},{"style":829},[3424],{"type":33,"value":3354},{"type":27,"tag":229,"props":3426,"children":3427},{"style":241},[3428],{"type":33,"value":3429},"\"sdk_demo\"",{"type":27,"tag":229,"props":3431,"children":3432},{"style":829},[3433],{"type":33,"value":949},{"type":27,"tag":229,"props":3435,"children":3437},{"class":231,"line":3436},77,[3438,3442,3446,3450,3455],{"type":27,"tag":229,"props":3439,"children":3440},{"style":235},[3441],{"type":33,"value":1583},{"type":27,"tag":229,"props":3443,"children":3444},{"style":829},[3445],{"type":33,"value":1588},{"type":27,"tag":229,"props":3447,"children":3448},{"style":235},[3449],{"type":33,"value":1541},{"type":27,"tag":229,"props":3451,"children":3452},{"style":829},[3453],{"type":33,"value":3454}," pm;",{"type":27,"tag":229,"props":3456,"children":3457},{"style":247},[3458],{"type":33,"value":3459},"          /* wire pm so set_pair can use the KV wrapper */\n",{"type":27,"tag":229,"props":3461,"children":3463},{"class":231,"line":3462},78,[3464,3468],{"type":27,"tag":229,"props":3465,"children":3466},{"style":235},[3467],{"type":33,"value":1610},{"type":27,"tag":229,"props":3469,"children":3470},{"style":829},[3471],{"type":33,"value":1917},{"type":27,"tag":229,"props":3473,"children":3475},{"class":231,"line":3474},79,[3476],{"type":27,"tag":229,"props":3477,"children":3478},{"style":829},[3479],{"type":33,"value":1624},{"type":27,"tag":229,"props":3481,"children":3483},{"class":231,"line":3482},80,[3484,3488,3493,3497,3501],{"type":27,"tag":229,"props":3485,"children":3486},{"style":235},[3487],{"type":33,"value":935},{"type":27,"tag":229,"props":3489,"children":3490},{"style":823},[3491],{"type":33,"value":3492}," legion_module_fini",{"type":27,"tag":229,"props":3494,"children":3495},{"style":829},[3496],{"type":33,"value":832},{"type":27,"tag":229,"props":3498,"children":3499},{"style":235},[3500],{"type":33,"value":935},{"type":27,"tag":229,"props":3502,"children":3503},{"style":829},[3504],{"type":33,"value":3505},") {}\n",{"type":27,"tag":229,"props":3507,"children":3509},{"class":231,"line":3508},81,[3510],{"type":27,"tag":229,"props":3511,"children":3512},{"style":235},[3513],{"type":33,"value":3514},"#endif\n",{"type":27,"tag":40,"props":3516,"children":3517},{},[3518],{"type":33,"value":3519},"Two ways this same source ships:",{"type":27,"tag":3521,"props":3522,"children":3523},"ul",{},[3524,3572],{"type":27,"tag":3525,"props":3526,"children":3527},"li",{},[3528,3533,3534,3539,3541,3547,3549,3555,3557,3563,3565,3571],{"type":27,"tag":44,"props":3529,"children":3530},{},[3531],{"type":33,"value":3532},"Built-in",{"type":33,"value":797},{"type":27,"tag":63,"props":3535,"children":3537},{"className":3536},[],[3538],{"type":33,"value":760},{"type":33,"value":3540}," aside, compiled into the runtime): registered by the\nruntime calling ",{"type":27,"tag":63,"props":3542,"children":3544},{"className":3543},[],[3545],{"type":33,"value":3546},"legion_module_register(pm, &legion_module_sdk_demo_reg)",{"type":33,"value":3548},"\ndirectly — no ",{"type":27,"tag":63,"props":3550,"children":3552},{"className":3551},[],[3553],{"type":33,"value":3554},"init",{"type":33,"value":3556}," export (define ",{"type":27,"tag":63,"props":3558,"children":3560},{"className":3559},[],[3561],{"type":33,"value":3562},"LEGION_BUILDING_LOADABLE_MODULE",{"type":33,"value":3564}," only for\nthe ",{"type":27,"tag":63,"props":3566,"children":3568},{"className":3567},[],[3569],{"type":33,"value":3570},".so",{"type":33,"value":324},{"type":27,"tag":3525,"props":3573,"children":3574},{},[3575,3580,3581,3586,3588,3594,3596,3602,3604,3610,3612,3618,3620,3625],{"type":27,"tag":44,"props":3576,"children":3577},{},[3578],{"type":33,"value":3579},"Loadable",{"type":33,"value":797},{"type":27,"tag":63,"props":3582,"children":3584},{"className":3583},[],[3585],{"type":33,"value":3570},{"type":33,"value":3587},"): exports ",{"type":27,"tag":63,"props":3589,"children":3591},{"className":3590},[],[3592],{"type":33,"value":3593},"legion_module_init",{"type":33,"value":3595}," (or ",{"type":27,"tag":63,"props":3597,"children":3599},{"className":3598},[],[3600],{"type":33,"value":3601},"legion_module_init_v2",{"type":33,"value":3603},"\nfor a config map) + optional ",{"type":27,"tag":63,"props":3605,"children":3607},{"className":3606},[],[3608],{"type":33,"value":3609},"legion_module_fini",{"type":33,"value":3611},"; the loader resolves them\n(",{"type":27,"tag":63,"props":3613,"children":3615},{"className":3614},[],[3616],{"type":33,"value":3617},"LEGION_MODULE_INIT_SYMBOL",{"type":33,"value":3619},"), verifies the module's signed manifest, calls\n",{"type":27,"tag":63,"props":3621,"children":3623},{"className":3622},[],[3624],{"type":33,"value":3554},{"type":33,"value":3626},", and registers the result.",{"type":27,"tag":40,"props":3628,"children":3629},{},[3630,3632,3637,3639,3644],{"type":33,"value":3631},"Once registered on a ",{"type":27,"tag":44,"props":3633,"children":3634},{},[3635],{"type":33,"value":3636},"certified",{"type":33,"value":3638}," node, ",{"type":27,"tag":63,"props":3640,"children":3642},{"className":3641},[],[3643],{"type":33,"value":1316},{"type":33,"value":3645}," is advertised to the\ncohort automatically; a consumer (L4) on any cohort node can then discover and\ninvoke it. You never call an \"advertise\" function.",{"type":27,"tag":83,"props":3647,"children":3649},{"id":3648},"reference",[3650],{"type":33,"value":3651},"Reference",{"type":27,"tag":3653,"props":3654,"children":3656},"h3",{"id":3655},"registration-lifecycle",[3657],{"type":33,"value":3658},"Registration & lifecycle",{"type":27,"tag":353,"props":3660,"children":3661},{},[3662,3678],{"type":27,"tag":357,"props":3663,"children":3664},{},[3665],{"type":27,"tag":361,"props":3666,"children":3667},{},[3668,3673],{"type":27,"tag":365,"props":3669,"children":3670},{},[3671],{"type":33,"value":3672},"Function",{"type":27,"tag":365,"props":3674,"children":3675},{},[3676],{"type":33,"value":3677},"Summary",{"type":27,"tag":381,"props":3679,"children":3680},{},[3681,3706,3737,3762,3785,3814,3844,3875],{"type":27,"tag":361,"props":3682,"children":3683},{},[3684,3693],{"type":27,"tag":388,"props":3685,"children":3686},{},[3687],{"type":27,"tag":63,"props":3688,"children":3690},{"className":3689},[],[3691],{"type":33,"value":3692},"legion_module_register(pm, reg)",{"type":27,"tag":388,"props":3694,"children":3695},{},[3696,3698,3704],{"type":33,"value":3697},"Register a module; ",{"type":27,"tag":63,"props":3699,"children":3701},{"className":3700},[],[3702],{"type":33,"value":3703},"reg",{"type":33,"value":3705}," must outlive the registration (static is normal).",{"type":27,"tag":361,"props":3707,"children":3708},{},[3709,3718],{"type":27,"tag":388,"props":3710,"children":3711},{},[3712],{"type":27,"tag":63,"props":3713,"children":3715},{"className":3714},[],[3716],{"type":33,"value":3717},"legion_module_register_with_config(pm, reg, config)",{"type":27,"tag":388,"props":3719,"children":3720},{},[3721,3723,3728,3730,3736],{"type":33,"value":3722},"As above, forwarding ",{"type":27,"tag":63,"props":3724,"children":3726},{"className":3725},[],[3727],{"type":33,"value":1495},{"type":33,"value":3729}," to ",{"type":27,"tag":63,"props":3731,"children":3733},{"className":3732},[],[3734],{"type":33,"value":3735},"reg->create()",{"type":33,"value":217},{"type":27,"tag":361,"props":3738,"children":3739},{},[3740,3749],{"type":27,"tag":388,"props":3741,"children":3742},{},[3743],{"type":27,"tag":63,"props":3744,"children":3746},{"className":3745},[],[3747],{"type":33,"value":3748},"legion_module_unregister(pm, name)",{"type":27,"tag":388,"props":3750,"children":3751},{},[3752,3754,3760],{"type":33,"value":3753},"Unregister; calls ",{"type":27,"tag":63,"props":3755,"children":3757},{"className":3756},[],[3758],{"type":33,"value":3759},"destroy()",{"type":33,"value":3761},". Idempotent.",{"type":27,"tag":361,"props":3763,"children":3764},{},[3765,3774],{"type":27,"tag":388,"props":3766,"children":3767},{},[3768],{"type":27,"tag":63,"props":3769,"children":3771},{"className":3770},[],[3772],{"type":33,"value":3773},"legion_module_get_method(pm, mod, method)",{"type":27,"tag":388,"props":3775,"children":3776},{},[3777,3779,3784],{"type":33,"value":3778},"Look up a method decl (or ",{"type":27,"tag":63,"props":3780,"children":3782},{"className":3781},[],[3783],{"type":33,"value":519},{"type":33,"value":324},{"type":27,"tag":361,"props":3786,"children":3787},{},[3788,3797],{"type":27,"tag":388,"props":3789,"children":3790},{},[3791],{"type":27,"tag":63,"props":3792,"children":3794},{"className":3793},[],[3795],{"type":33,"value":3796},"legion_module_check_deps(pm, name)",{"type":27,"tag":388,"props":3798,"children":3799},{},[3800,3805,3807,3812],{"type":27,"tag":63,"props":3801,"children":3803},{"className":3802},[],[3804],{"type":33,"value":960},{"type":33,"value":3806}," iff all ",{"type":27,"tag":63,"props":3808,"children":3810},{"className":3809},[],[3811],{"type":33,"value":540},{"type":33,"value":3813}," are satisfied.",{"type":27,"tag":361,"props":3815,"children":3816},{},[3817,3826],{"type":27,"tag":388,"props":3818,"children":3819},{},[3820],{"type":27,"tag":63,"props":3821,"children":3823},{"className":3822},[],[3824],{"type":33,"value":3825},"legion_module_get_category(pm, name)",{"type":27,"tag":388,"props":3827,"children":3828},{},[3829,3835,3837,3843],{"type":27,"tag":63,"props":3830,"children":3832},{"className":3831},[],[3833],{"type":33,"value":3834},"SYSTEM",{"type":33,"value":3836}," vs ",{"type":27,"tag":63,"props":3838,"children":3840},{"className":3839},[],[3841],{"type":33,"value":3842},"LOADABLE",{"type":33,"value":217},{"type":27,"tag":361,"props":3845,"children":3846},{},[3847,3856],{"type":27,"tag":388,"props":3848,"children":3849},{},[3850],{"type":27,"tag":63,"props":3851,"children":3853},{"className":3852},[],[3854],{"type":33,"value":3855},"legion_plugin_get_module_data(pm, name)",{"type":27,"tag":388,"props":3857,"children":3858},{},[3859,3861,3866,3868,3874],{"type":33,"value":3860},"The opaque ",{"type":27,"tag":63,"props":3862,"children":3864},{"className":3863},[],[3865],{"type":33,"value":662},{"type":33,"value":3867}," from ",{"type":27,"tag":63,"props":3869,"children":3871},{"className":3870},[],[3872],{"type":33,"value":3873},"create()",{"type":33,"value":217},{"type":27,"tag":361,"props":3876,"children":3877},{},[3878,3887],{"type":27,"tag":388,"props":3879,"children":3880},{},[3881],{"type":27,"tag":63,"props":3882,"children":3884},{"className":3883},[],[3885],{"type":33,"value":3886},"legion_plugin_manager_get_node_id(pm)",{"type":27,"tag":388,"props":3888,"children":3889},{},[3890],{"type":33,"value":3891},"This node's id (manager-owned; do not free).",{"type":27,"tag":3653,"props":3893,"children":3895},{"id":3894},"dispatch-calling-other-modules-capabilities",[3896],{"type":33,"value":3897},"Dispatch (calling other modules / capabilities)",{"type":27,"tag":353,"props":3899,"children":3900},{},[3901,3915],{"type":27,"tag":357,"props":3902,"children":3903},{},[3904],{"type":27,"tag":361,"props":3905,"children":3906},{},[3907,3911],{"type":27,"tag":365,"props":3908,"children":3909},{},[3910],{"type":33,"value":3672},{"type":27,"tag":365,"props":3912,"children":3913},{},[3914],{"type":33,"value":3677},{"type":27,"tag":381,"props":3916,"children":3917},{},[3918,3942,3966,3997],{"type":27,"tag":361,"props":3919,"children":3920},{},[3921,3930],{"type":27,"tag":388,"props":3922,"children":3923},{},[3924],{"type":27,"tag":63,"props":3925,"children":3927},{"className":3926},[],[3928],{"type":33,"value":3929},"legion_plugin_call(...)",{"type":27,"tag":388,"props":3931,"children":3932},{},[3933,3935,3940],{"type":33,"value":3934},"Synchronous, ",{"type":27,"tag":44,"props":3936,"children":3937},{},[3938],{"type":33,"value":3939},"local-only",{"type":33,"value":3941},", no consensus/delegation. For a known-local, non-mutating target.",{"type":27,"tag":361,"props":3943,"children":3944},{},[3945,3954],{"type":27,"tag":388,"props":3946,"children":3947},{},[3948],{"type":27,"tag":63,"props":3949,"children":3951},{"className":3950},[],[3952],{"type":33,"value":3953},"legion_module_dispatch(...)",{"type":27,"tag":388,"props":3955,"children":3956},{},[3957,3959,3964],{"type":33,"value":3958},"Synchronous; mutating methods route through consensus (if ",{"type":27,"tag":63,"props":3960,"children":3962},{"className":3961},[],[3963],{"type":33,"value":1103},{"type":33,"value":3965},"≠NULL & wired), non-mutating run locally.",{"type":27,"tag":361,"props":3967,"children":3968},{},[3969,3978],{"type":27,"tag":388,"props":3970,"children":3971},{},[3972],{"type":27,"tag":63,"props":3973,"children":3975},{"className":3974},[],[3976],{"type":33,"value":3977},"legion_module_dispatch_async(...)",{"type":27,"tag":388,"props":3979,"children":3980},{},[3981,3983,3989,3991,3996],{"type":33,"value":3982},"Returns a ",{"type":27,"tag":63,"props":3984,"children":3986},{"className":3985},[],[3987],{"type":33,"value":3988},"legion_future_t *",{"type":33,"value":3990},"; non-mutating methods may be ",{"type":27,"tag":44,"props":3992,"children":3993},{},[3994],{"type":33,"value":3995},"delegated to a peer",{"type":33,"value":217},{"type":27,"tag":361,"props":3998,"children":3999},{},[4000,4009],{"type":27,"tag":388,"props":4001,"children":4002},{},[4003],{"type":27,"tag":63,"props":4004,"children":4006},{"className":4005},[],[4007],{"type":33,"value":4008},"legion_module_dispatch_to_cap_async(pm, required_cap, mod, method, params, caller_tier)",{"type":27,"tag":388,"props":4010,"children":4011},{},[4012],{"type":33,"value":4013},"Delegate by capability when the target module isn't registered locally (orchestrator pattern).",{"type":27,"tag":3653,"props":4015,"children":4017},{"id":4016},"l3-kv-wrapper-sdkh497",[4018,4020,4026],{"type":33,"value":4019},"L3 KV wrapper (",{"type":27,"tag":63,"props":4021,"children":4023},{"className":4022},[],[4024],{"type":33,"value":4025},"sdk.h:497",{"type":33,"value":4027},")",{"type":27,"tag":40,"props":4029,"children":4030},{},[4031,4033,4038,4040,4046,4048,4053,4054,4060,4062,4068,4070,4076,4078,4084,4086,4091,4093,4099],{"type":33,"value":4032},"Typed facade over the ",{"type":27,"tag":63,"props":4034,"children":4036},{"className":4035},[],[4037],{"type":33,"value":120},{"type":33,"value":4039}," module. Mutating ops route through consensus when\nthe manager's ",{"type":27,"tag":63,"props":4041,"children":4043},{"className":4042},[],[4044],{"type":33,"value":4045},"submit_fn",{"type":33,"value":4047}," is wired. ",{"type":27,"tag":44,"props":4049,"children":4050},{},[4051],{"type":33,"value":4052},"Tier rule:",{"type":33,"value":279},{"type":27,"tag":63,"props":4055,"children":4057},{"className":4056},[],[4058],{"type":33,"value":4059},"target_tier >= caller_tier",{"type":33,"value":4061},"\n(lower number = more privileged); ",{"type":27,"tag":63,"props":4063,"children":4065},{"className":4064},[],[4066],{"type":33,"value":4067},"_set",{"type":33,"value":4069}," is shorthand for ",{"type":27,"tag":63,"props":4071,"children":4073},{"className":4072},[],[4074],{"type":33,"value":4075},"_set_at_tier(…, caller_tier, caller_tier)",{"type":33,"value":4077},". Values from ",{"type":27,"tag":63,"props":4079,"children":4081},{"className":4080},[],[4082],{"type":33,"value":4083},"_get",{"type":33,"value":4085}," are ",{"type":27,"tag":63,"props":4087,"children":4089},{"className":4088},[],[4090],{"type":33,"value":976},{"type":33,"value":4092},"-owned —\nfree with ",{"type":27,"tag":63,"props":4094,"children":4096},{"className":4095},[],[4097],{"type":33,"value":4098},"legion_pal->free",{"type":33,"value":217},{"type":27,"tag":353,"props":4101,"children":4102},{},[4103,4118],{"type":27,"tag":357,"props":4104,"children":4105},{},[4106],{"type":27,"tag":361,"props":4107,"children":4108},{},[4109,4113],{"type":27,"tag":365,"props":4110,"children":4111},{},[4112],{"type":33,"value":3672},{"type":27,"tag":365,"props":4114,"children":4115},{},[4116],{"type":33,"value":4117},"Routing",{"type":27,"tag":381,"props":4119,"children":4120},{},[4121,4144,4168],{"type":27,"tag":361,"props":4122,"children":4123},{},[4124,4139],{"type":27,"tag":388,"props":4125,"children":4126},{},[4127,4132,4133],{"type":27,"tag":63,"props":4128,"children":4130},{"className":4129},[],[4131],{"type":33,"value":175},{"type":33,"value":445},{"type":27,"tag":63,"props":4134,"children":4136},{"className":4135},[],[4137],{"type":33,"value":4138},"_set_at_tier",{"type":27,"tag":388,"props":4140,"children":4141},{},[4142],{"type":33,"value":4143},"consensus (mutating)",{"type":27,"tag":361,"props":4145,"children":4146},{},[4147,4163],{"type":27,"tag":388,"props":4148,"children":4149},{},[4150,4156,4157],{"type":27,"tag":63,"props":4151,"children":4153},{"className":4152},[],[4154],{"type":33,"value":4155},"legion_l3_kv_get",{"type":33,"value":445},{"type":27,"tag":63,"props":4158,"children":4160},{"className":4159},[],[4161],{"type":33,"value":4162},"_exists",{"type":27,"tag":388,"props":4164,"children":4165},{},[4166],{"type":33,"value":4167},"local read",{"type":27,"tag":361,"props":4169,"children":4170},{},[4171,4201],{"type":27,"tag":388,"props":4172,"children":4173},{},[4174,4180,4181,4187,4188,4194,4195],{"type":27,"tag":63,"props":4175,"children":4177},{"className":4176},[],[4178],{"type":33,"value":4179},"legion_l3_kv_delete",{"type":33,"value":445},{"type":27,"tag":63,"props":4182,"children":4184},{"className":4183},[],[4185],{"type":33,"value":4186},"_append",{"type":33,"value":445},{"type":27,"tag":63,"props":4189,"children":4191},{"className":4190},[],[4192],{"type":33,"value":4193},"_incr",{"type":33,"value":445},{"type":27,"tag":63,"props":4196,"children":4198},{"className":4197},[],[4199],{"type":33,"value":4200},"_decr",{"type":27,"tag":388,"props":4202,"children":4203},{},[4204],{"type":33,"value":4143},{"type":27,"tag":40,"props":4206,"children":4207},{},[4208,4214],{"type":27,"tag":63,"props":4209,"children":4211},{"className":4210},[],[4212],{"type":33,"value":4213},"LEGION_L3_KV_KEY_MAX",{"type":33,"value":4215}," = 64.",{"type":27,"tag":3653,"props":4217,"children":4219},{"id":4218},"l3-capabilities-membership-sdkh628",[4220,4222,4228],{"type":33,"value":4221},"L3 capabilities & membership (",{"type":27,"tag":63,"props":4223,"children":4225},{"className":4224},[],[4226],{"type":33,"value":4227},"sdk.h:628",{"type":33,"value":4027},{"type":27,"tag":40,"props":4230,"children":4231},{},[4232,4234,4239,4241,4247,4249,4254,4256,4261],{"type":33,"value":4233},"Reads are local (consensus-VM maps, no network); writes build/sign/submit the\non-wire envelope through ",{"type":27,"tag":63,"props":4235,"children":4237},{"className":4236},[],[4238],{"type":33,"value":4045},{"type":33,"value":4240}," (require it wired, else\n",{"type":27,"tag":63,"props":4242,"children":4244},{"className":4243},[],[4245],{"type":33,"value":4246},"LEGION_ERR_NOT_INITIALIZED",{"type":33,"value":4248},"). ",{"type":27,"tag":44,"props":4250,"children":4251},{},[4252],{"type":33,"value":4253},"No read-your-writes",{"type":33,"value":4255}," on writes (apply runs after\ncommit). Read results are ",{"type":27,"tag":63,"props":4257,"children":4259},{"className":4258},[],[4260],{"type":33,"value":976},{"type":33,"value":4262},"-owned arrays.",{"type":27,"tag":353,"props":4264,"children":4265},{},[4266,4280],{"type":27,"tag":357,"props":4267,"children":4268},{},[4269],{"type":27,"tag":361,"props":4270,"children":4271},{},[4272,4276],{"type":27,"tag":365,"props":4273,"children":4274},{},[4275],{"type":33,"value":3672},{"type":27,"tag":365,"props":4277,"children":4278},{},[4279],{"type":33,"value":3677},{"type":27,"tag":381,"props":4281,"children":4282},{},[4283,4308,4325,4342,4374,4391,4415],{"type":27,"tag":361,"props":4284,"children":4285},{},[4286,4295],{"type":27,"tag":388,"props":4287,"children":4288},{},[4289],{"type":27,"tag":63,"props":4290,"children":4292},{"className":4291},[],[4293],{"type":33,"value":4294},"legion_l3_caps_query(pm, cap, …)",{"type":27,"tag":388,"props":4296,"children":4297},{},[4298,4300,4306],{"type":33,"value":4299},"Which member nodes advertise ",{"type":27,"tag":63,"props":4301,"children":4303},{"className":4302},[],[4304],{"type":33,"value":4305},"cap",{"type":33,"value":4307},"?",{"type":27,"tag":361,"props":4309,"children":4310},{},[4311,4320],{"type":27,"tag":388,"props":4312,"children":4313},{},[4314],{"type":27,"tag":63,"props":4315,"children":4317},{"className":4316},[],[4318],{"type":33,"value":4319},"legion_l3_membership_query(pm, cohort_hex, …)",{"type":27,"tag":388,"props":4321,"children":4322},{},[4323],{"type":33,"value":4324},"Members of a cohort.",{"type":27,"tag":361,"props":4326,"children":4327},{},[4328,4337],{"type":27,"tag":388,"props":4329,"children":4330},{},[4331],{"type":27,"tag":63,"props":4332,"children":4334},{"className":4333},[],[4335],{"type":33,"value":4336},"legion_l3_caps_list_for_node(pm, node_hex, …)",{"type":27,"tag":388,"props":4338,"children":4339},{},[4340],{"type":33,"value":4341},"Caps a node advertises (names).",{"type":27,"tag":361,"props":4343,"children":4344},{},[4345,4354],{"type":27,"tag":388,"props":4346,"children":4347},{},[4348],{"type":27,"tag":63,"props":4349,"children":4351},{"className":4350},[],[4352],{"type":33,"value":4353},"legion_l3_caps_list_for_node_full(pm, node_hex, …)",{"type":27,"tag":388,"props":4355,"children":4356},{},[4357,4359,4365,4366,4372],{"type":33,"value":4358},"Caps as ",{"type":27,"tag":63,"props":4360,"children":4362},{"className":4361},[],[4363],{"type":33,"value":4364},"(name, tier, semantic)",{"type":33,"value":797},{"type":27,"tag":63,"props":4367,"children":4369},{"className":4368},[],[4370],{"type":33,"value":4371},"legion_cap_info_t",{"type":33,"value":4373},") — lets a consumer pick a transport from the semantic.",{"type":27,"tag":361,"props":4375,"children":4376},{},[4377,4386],{"type":27,"tag":388,"props":4378,"children":4379},{},[4380],{"type":27,"tag":63,"props":4381,"children":4383},{"className":4382},[],[4384],{"type":33,"value":4385},"legion_l3_membership_get_founder(pm, cohort_hex, …)",{"type":27,"tag":388,"props":4387,"children":4388},{},[4389],{"type":33,"value":4390},"Founder pk of a cohort.",{"type":27,"tag":361,"props":4392,"children":4393},{},[4394,4410],{"type":27,"tag":388,"props":4395,"children":4396},{},[4397,4403,4404],{"type":27,"tag":63,"props":4398,"children":4400},{"className":4399},[],[4401],{"type":33,"value":4402},"legion_l3_caps_advertise",{"type":33,"value":445},{"type":27,"tag":63,"props":4405,"children":4407},{"className":4406},[],[4408],{"type":33,"value":4409},"_caps_revoke",{"type":27,"tag":388,"props":4411,"children":4412},{},[4413],{"type":33,"value":4414},"Advertise/revoke the local node's caps (signs + submits).",{"type":27,"tag":361,"props":4416,"children":4417},{},[4418,4441],{"type":27,"tag":388,"props":4419,"children":4420},{},[4421,4427,4428,4434,4435],{"type":27,"tag":63,"props":4422,"children":4424},{"className":4423},[],[4425],{"type":33,"value":4426},"legion_l3_membership_genesis",{"type":33,"value":445},{"type":27,"tag":63,"props":4429,"children":4431},{"className":4430},[],[4432],{"type":33,"value":4433},"_join",{"type":33,"value":445},{"type":27,"tag":63,"props":4436,"children":4438},{"className":4437},[],[4439],{"type":33,"value":4440},"_leave",{"type":27,"tag":388,"props":4442,"children":4443},{},[4444],{"type":33,"value":4445},"Found / join / leave a cohort.",{"type":27,"tag":40,"props":4447,"children":4448},{},[4449,4451,4457,4459,4465],{"type":33,"value":4450},"Bounds: ",{"type":27,"tag":63,"props":4452,"children":4454},{"className":4453},[],[4455],{"type":33,"value":4456},"LEGION_L3_CAPS_MAX_CAPS",{"type":33,"value":4458}," = 64, ",{"type":27,"tag":63,"props":4460,"children":4462},{"className":4461},[],[4463],{"type":33,"value":4464},"LEGION_L3_CAPS_MAX_CAP_NAME_LEN",{"type":33,"value":4215},{"type":27,"tag":3653,"props":4467,"children":4469},{"id":4468},"futures-async-delegation-results-sdkh269",[4470,4472,4478],{"type":33,"value":4471},"Futures (async delegation results) (",{"type":27,"tag":63,"props":4473,"children":4475},{"className":4474},[],[4476],{"type":33,"value":4477},"sdk.h:269",{"type":33,"value":4027},{"type":27,"tag":40,"props":4480,"children":4481},{},[4482,4488,4489,4495,4496,4502,4503,4509,4511,4517,4518,4524,4526,4532,4533,4539,4541,4547],{"type":27,"tag":63,"props":4483,"children":4485},{"className":4484},[],[4486],{"type":33,"value":4487},"legion_future_create",{"type":33,"value":445},{"type":27,"tag":63,"props":4490,"children":4492},{"className":4491},[],[4493],{"type":33,"value":4494},"_destroy",{"type":33,"value":445},{"type":27,"tag":63,"props":4497,"children":4499},{"className":4498},[],[4500],{"type":33,"value":4501},"_is_ready",{"type":33,"value":445},{"type":27,"tag":63,"props":4504,"children":4506},{"className":4505},[],[4507],{"type":33,"value":4508},"_wait(timeout_ms)",{"type":33,"value":4510}," /\n",{"type":27,"tag":63,"props":4512,"children":4514},{"className":4513},[],[4515],{"type":33,"value":4516},"_get(result,len)",{"type":33,"value":445},{"type":27,"tag":63,"props":4519,"children":4521},{"className":4520},[],[4522],{"type":33,"value":4523},"_on_complete(cb,ctx)",{"type":33,"value":4525}," — plus ",{"type":27,"tag":63,"props":4527,"children":4529},{"className":4528},[],[4530],{"type":33,"value":4531},"_set_on_part",{"type":33,"value":445},{"type":27,"tag":63,"props":4534,"children":4536},{"className":4535},[],[4537],{"type":33,"value":4538},"_deliver_part",{"type":33,"value":4540},"\nfor streaming responses. (",{"type":27,"tag":63,"props":4542,"children":4544},{"className":4543},[],[4545],{"type":33,"value":4546},"_resolve",{"type":33,"value":4548}," is normally called by the runtime, not modules.)",{"type":27,"tag":3653,"props":4550,"children":4552},{"id":4551},"state-sync-legion_module_sync_t-sdkh144",[4553,4555,4561,4562,4568],{"type":33,"value":4554},"State sync (",{"type":27,"tag":63,"props":4556,"children":4558},{"className":4557},[],[4559],{"type":33,"value":4560},"legion_module_sync_t",{"type":33,"value":122},{"type":27,"tag":63,"props":4563,"children":4565},{"className":4564},[],[4566],{"type":33,"value":4567},"sdk.h:144",{"type":33,"value":4027},{"type":27,"tag":40,"props":4570,"children":4571},{},[4572,4574,4580,4582,4588,4590,4596,4598,4604,4606,4612],{"type":33,"value":4573},"Set ",{"type":27,"tag":63,"props":4575,"children":4577},{"className":4576},[],[4578],{"type":33,"value":4579},"reg->sync",{"type":33,"value":4581}," if your module holds state that must survive epoch rollover /\nlate-joiner catch-up: ",{"type":27,"tag":63,"props":4583,"children":4585},{"className":4584},[],[4586],{"type":33,"value":4587},"snapshot",{"type":33,"value":4589},"/",{"type":27,"tag":63,"props":4591,"children":4593},{"className":4592},[],[4594],{"type":33,"value":4595},"restore",{"type":33,"value":4597}," (small states) or the chunked\n",{"type":27,"tag":63,"props":4599,"children":4601},{"className":4600},[],[4602],{"type":33,"value":4603},"snapshot_begin/_chunk",{"type":33,"value":4605}," + ",{"type":27,"tag":63,"props":4607,"children":4609},{"className":4608},[],[4610],{"type":33,"value":4611},"restore_begin/_chunk/_finalize",{"type":33,"value":4613}," pair (large states).",{"type":27,"tag":3653,"props":4615,"children":4617},{"id":4616},"loadable-module-abi-sdkh805",[4618,4620,4626],{"type":33,"value":4619},"Loadable-module ABI (",{"type":27,"tag":63,"props":4621,"children":4623},{"className":4622},[],[4624],{"type":33,"value":4625},"sdk.h:805",{"type":33,"value":4027},{"type":27,"tag":40,"props":4628,"children":4629},{},[4630,4632,4637,4638,4644,4646,4651,4653,4658,4659,4665,4666,4671,4673,4678,4680,4686,4687,4693],{"type":33,"value":4631},"Export ",{"type":27,"tag":63,"props":4633,"children":4635},{"className":4634},[],[4636],{"type":33,"value":3593},{"type":33,"value":797},{"type":27,"tag":63,"props":4639,"children":4641},{"className":4640},[],[4642],{"type":33,"value":4643},"legion_module_init_fn",{"type":33,"value":4645},", receives ",{"type":27,"tag":63,"props":4647,"children":4649},{"className":4648},[],[4650],{"type":33,"value":3322},{"type":33,"value":4652},") or\n",{"type":27,"tag":63,"props":4654,"children":4656},{"className":4655},[],[4657],{"type":33,"value":3601},{"type":33,"value":797},{"type":27,"tag":63,"props":4660,"children":4662},{"className":4661},[],[4663],{"type":33,"value":4664},"…_fn_v2",{"type":33,"value":4645},{"type":27,"tag":63,"props":4667,"children":4669},{"className":4668},[],[4670],{"type":33,"value":3322},{"type":33,"value":4672}," + a config map), plus optional\n",{"type":27,"tag":63,"props":4674,"children":4676},{"className":4675},[],[4677],{"type":33,"value":3609},{"type":33,"value":4679},". The loader resolves them by the\n",{"type":27,"tag":63,"props":4681,"children":4683},{"className":4682},[],[4684],{"type":33,"value":4685},"LEGION_MODULE_INIT_SYMBOL[_V2]",{"type":33,"value":445},{"type":27,"tag":63,"props":4688,"children":4690},{"className":4689},[],[4691],{"type":33,"value":4692},"_FINI_SYMBOL",{"type":33,"value":4694}," names.",{"type":27,"tag":83,"props":4696,"children":4698},{"id":4697},"key-rules-gotchas",[4699],{"type":33,"value":4700},"Key rules & gotchas",{"type":27,"tag":3521,"props":4702,"children":4703},{},[4704,4756,4784,4829,4853,4863],{"type":27,"tag":3525,"props":4705,"children":4706},{},[4707,4712,4714,4719,4721,4726,4728,4732,4734,4739,4741,4747,4748,4754],{"type":27,"tag":44,"props":4708,"children":4709},{},[4710],{"type":33,"value":4711},"Memory ownership:",{"type":33,"value":4713}," allocate results with ",{"type":27,"tag":63,"props":4715,"children":4717},{"className":4716},[],[4718],{"type":33,"value":976},{"type":33,"value":4720},"; free\nlibrary-returned buffers with ",{"type":27,"tag":63,"props":4722,"children":4724},{"className":4723},[],[4725],{"type":33,"value":4098},{"type":33,"value":4727}," — ",{"type":27,"tag":44,"props":4729,"children":4730},{},[4731],{"type":33,"value":182},{"type":33,"value":4733}," libc ",{"type":27,"tag":63,"props":4735,"children":4737},{"className":4736},[],[4738],{"type":33,"value":1678},{"type":33,"value":4740}," (the PAL\nmay use ",{"type":27,"tag":63,"props":4742,"children":4744},{"className":4743},[],[4745],{"type":33,"value":4746},"HeapAlloc",{"type":33,"value":4589},{"type":27,"tag":63,"props":4749,"children":4751},{"className":4750},[],[4752],{"type":33,"value":4753},"HeapFree",{"type":33,"value":4755}," on Windows).",{"type":27,"tag":3525,"props":4757,"children":4758},{},[4759,4769,4771,4776,4778,4783],{"type":27,"tag":44,"props":4760,"children":4761},{},[4762,4767],{"type":27,"tag":63,"props":4763,"children":4765},{"className":4764},[],[4766],{"type":33,"value":1087},{"type":33,"value":4768}," ⇒ consensus.",{"type":33,"value":4770}," A mutating method only converges across the\ncohort when the manager's ",{"type":27,"tag":63,"props":4772,"children":4774},{"className":4773},[],[4775],{"type":33,"value":4045},{"type":33,"value":4777}," is wired (the node runtime does this);\notherwise it applies locally and still returns ",{"type":27,"tag":63,"props":4779,"children":4781},{"className":4780},[],[4782],{"type":33,"value":960},{"type":33,"value":217},{"type":27,"tag":3525,"props":4785,"children":4786},{},[4787,4792,4794,4799,4801,4806,4808,4813,4815,4820,4822,4827],{"type":27,"tag":44,"props":4788,"children":4789},{},[4790],{"type":33,"value":4791},"Tiers",{"type":33,"value":4793}," are privilege levels ",{"type":27,"tag":63,"props":4795,"children":4797},{"className":4796},[],[4798],{"type":33,"value":1172},{"type":33,"value":4800},"(sovereign)…",{"type":27,"tag":63,"props":4802,"children":4804},{"className":4803},[],[4805],{"type":33,"value":1180},{"type":33,"value":4807},"(interface), enforced as\n",{"type":27,"tag":63,"props":4809,"children":4811},{"className":4810},[],[4812],{"type":33,"value":4059},{"type":33,"value":4814}," and per-method ",{"type":27,"tag":63,"props":4816,"children":4818},{"className":4817},[],[4819],{"type":33,"value":1161},{"type":33,"value":4821},". Tiers are orthogonal to\nthe cap ",{"type":27,"tag":44,"props":4823,"children":4824},{},[4825],{"type":33,"value":4826},"semantic",{"type":33,"value":4828}," (the interaction shape).",{"type":27,"tag":3525,"props":4830,"children":4831},{},[4832,4837,4839,4844,4846,4851],{"type":27,"tag":44,"props":4833,"children":4834},{},[4835],{"type":33,"value":4836},"Declaring is advertising.",{"type":33,"value":4838}," Put a cap in ",{"type":27,"tag":63,"props":4840,"children":4842},{"className":4841},[],[4843],{"type":33,"value":443},{"type":33,"value":4845},"; a certified node\nadvertises it automatically. Modules may also drive ",{"type":27,"tag":63,"props":4847,"children":4849},{"className":4848},[],[4850],{"type":33,"value":4402},{"type":33,"value":4852},"\nfor dynamic cases. Apps never advertise.",{"type":27,"tag":3525,"props":4854,"children":4855},{},[4856,4861],{"type":27,"tag":44,"props":4857,"children":4858},{},[4859],{"type":33,"value":4860},"Concurrency:",{"type":33,"value":4862}," handlers can be called from multiple threads at once.",{"type":27,"tag":3525,"props":4864,"children":4865},{},[4866,4871,4873,4878,4879,4884],{"type":27,"tag":44,"props":4867,"children":4868},{},[4869],{"type":33,"value":4870},"Include discipline:",{"type":33,"value":4872}," only ",{"type":27,"tag":63,"props":4874,"children":4876},{"className":4875},[],[4877],{"type":33,"value":285},{"type":33,"value":4605},{"type":27,"tag":63,"props":4880,"children":4882},{"className":4881},[],[4883],{"type":33,"value":292},{"type":33,"value":4885}," + the SDK allowlist; the\nCI gate rejects below-L3 includes.",{"type":27,"tag":83,"props":4887,"children":4889},{"id":4888},"status",[4890],{"type":33,"value":4891},"Status",{"type":27,"tag":40,"props":4893,"children":4894},{},[4895,4897,4905,4907,4915,4917,4922],{"type":33,"value":4896},"DRAFT — surfaced for review. Expect changes. Companion docs:\n",{"type":27,"tag":59,"props":4898,"children":4899},{"href":9},[4900],{"type":27,"tag":63,"props":4901,"children":4903},{"className":4902},[],[4904],{"type":33,"value":68},{"type":33,"value":4906}," (the layer model), ",{"type":27,"tag":59,"props":4908,"children":4909},{"href":5},[4910],{"type":27,"tag":63,"props":4911,"children":4913},{"className":4912},[],[4914],{"type":33,"value":79},{"type":33,"value":4916}," (the\nABI boundary), and an ",{"type":27,"tag":44,"props":4918,"children":4919},{},[4920],{"type":33,"value":4921},"L4 application reference + guide",{"type":33,"value":4923}," (next).",{"type":27,"tag":4925,"props":4926,"children":4927},"style",{},[4928],{"type":33,"value":4929},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":21,"searchDepth":7,"depth":7,"links":4931},[4932,4933,4934,4935,4949,4950],{"id":85,"depth":7,"text":88},{"id":327,"depth":7,"text":330},{"id":1286,"depth":7,"text":1289},{"id":3648,"depth":7,"text":3651,"children":4936},[4937,4938,4939,4941,4943,4945,4947],{"id":3655,"depth":15,"text":3658},{"id":3894,"depth":15,"text":3897},{"id":4016,"depth":15,"text":4940},"L3 KV wrapper (sdk.h:497)",{"id":4218,"depth":15,"text":4942},"L3 capabilities & membership (sdk.h:628)",{"id":4468,"depth":15,"text":4944},"Futures (async delegation results) (sdk.h:269)",{"id":4551,"depth":15,"text":4946},"State sync (legion_module_sync_t, sdk.h:144)",{"id":4616,"depth":15,"text":4948},"Loadable-module ABI (sdk.h:805)",{"id":4697,"depth":7,"text":4700},{"id":4888,"depth":7,"text":4891},"markdown","content:l3-modules.md","content","l3-modules.md","l3-modules","md",{"loc":13},1784532242628]