diff --git a/404.html b/404.html index b43a469..fb10eaf 100644 --- a/404.html +++ b/404.html @@ -4,8 +4,8 @@ Page Not Found | Astral.Frontend Guides - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/assets/js/140.309706a2.js b/assets/js/140.3b5c594e.js similarity index 53% rename from assets/js/140.309706a2.js rename to assets/js/140.3b5c594e.js index 08c2717..ad69c9b 100644 --- a/assets/js/140.309706a2.js +++ b/assets/js/140.3b5c594e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[140],{6140:(s,e,a)=>{a.r(e)}}]); \ No newline at end of file +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[140],{8520:(s,e,a)=>{a.r(e)}}]); \ No newline at end of file diff --git a/assets/js/1d7de737.d19a36cb.js b/assets/js/1d7de737.d19a36cb.js new file mode 100644 index 0000000..b56f7e8 --- /dev/null +++ b/assets/js/1d7de737.d19a36cb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[160],{8692:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>d});var r=t(7624),i=t(2172);const o={sidebar_position:0},s="Intro",c={id:"env/intro",title:"Intro",description:"\u0420\u0430\u0437\u0434\u0435\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:",source:"@site/docs/env/intro.md",sourceDirName:"env",slug:"/env/intro",permalink:"/guides/docs/env/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/env/intro.md",tags:[],version:"current",sidebarPosition:0,frontMatter:{sidebar_position:0},sidebar:"tutorialSidebar",previous:{title:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env",permalink:"/guides/docs/category/\u0440\u0430\u0431\u043e\u0442\u0430-\u0441-env"},next:{title:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435",permalink:"/guides/docs/env/arch"}},a={},d=[];function l(e){const n={h1:"h1",li:"li",p:"p",ul:"ul",...(0,i.M)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"intro",children:"Intro"}),"\n",(0,r.jsx)(n.p,{children:"\u0420\u0430\u0437\u0434\u0435\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 env \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0435\u0434\u0438\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b"}),"\n",(0,r.jsx)(n.li,{children:"\u041a\u0430\u043a \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c env \u0432 CSR (Client Side Rendering)"}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,i.M)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},2172:(e,n,t)=>{t.d(n,{I:()=>c,M:()=>s});var r=t(1504);const i={},o=r.createContext(i);function s(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3c8913a0.8c910b0a.js b/assets/js/3c8913a0.8c910b0a.js new file mode 100644 index 0000000..a16cce3 --- /dev/null +++ b/assets/js/3c8913a0.8c910b0a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[296],{6140:e=>{e.exports=JSON.parse('{"title":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env","description":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445","slug":"/category/\u0440\u0430\u0431\u043e\u0442\u0430-\u0441-env","permalink":"/guides/docs/category/\u0440\u0430\u0431\u043e\u0442\u0430-\u0441-env","navigation":{"previous":{"title":"Feature Toggle \u0438 Permissions","permalink":"/guides/docs/permissions/featureToggle"},"next":{"title":"Intro","permalink":"/guides/docs/env/intro"}}}')}}]); \ No newline at end of file diff --git a/assets/js/5958da79.0b713440.js b/assets/js/5958da79.0b713440.js new file mode 100644 index 0000000..9bd9c56 --- /dev/null +++ b/assets/js/5958da79.0b713440.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[908],{6384:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>g,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var n=r(7624),t=r(2172);const i={sidebar_position:12},o="Feature Toggle \u0438 Permissions",a={id:"permissions/featureToggle",title:"Feature Toggle \u0438 Permissions",description:"Feature Toggle \u0438 Permissions - \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.",source:"@site/docs/permissions/featureToggle.md",sourceDirName:"permissions",slug:"/permissions/featureToggle",permalink:"/guides/docs/permissions/featureToggle",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/permissions/featureToggle.md",tags:[],version:"current",sidebarPosition:12,frontMatter:{sidebar_position:12},sidebar:"tutorialSidebar",previous:{title:"2FA (Two-factor Auth)",permalink:"/guides/docs/permissions/2fa"},next:{title:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env",permalink:"/guides/docs/category/\u0440\u0430\u0431\u043e\u0442\u0430-\u0441-env"}},g={},l=[{value:"Permissions \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Feature Toggle",id:"permissions-\u043c\u043e\u0436\u0435\u0442-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c-feature-toggle",level:2}];function u(e){const s={a:"a",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,t.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"feature-toggle-\u0438-permissions",children:"Feature Toggle \u0438 Permissions"}),"\n",(0,n.jsx)(s.p,{children:"Feature Toggle \u0438 Permissions - \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438."}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"Feature Toggle"})," \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430. \u0424\u0438\u0447\u0430 \u0444\u043b\u0430\u0433\u0438 - \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u044b.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0444\u043e\u043a\u0443\u0441\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430."]}),"\n",(0,n.jsxs)(s.p,{children:["\u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c ",(0,n.jsx)(s.strong,{children:"Permissions"})," - \u044d\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439."]}),"\n",(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.strong,{children:"\u041d\u0435\u043b\u044c\u0437\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 Feature Toggle \u0438 Permissions \u0432 \u043e\u0434\u043d\u043e\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438"}),", \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430."]}),"\n",(0,n.jsx)(s.h2,{id:"permissions-\u043c\u043e\u0436\u0435\u0442-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c-feature-toggle",children:"Permissions \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Feature Toggle"}),"\n",(0,n.jsxs)(s.p,{children:["Permissions \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Feature Toggle \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 Feature Toggle \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 ",(0,n.jsx)(s.a,{href:"https://martinfowler.com/articles/feature-toggles.html#CategoriesOfToggles:~:text=Operations%20person%20happy.-,Permissioning%20Toggles,-turning%20on%20new",children:"Permissioning Toggles"}),"."]}),"\n",(0,n.jsx)(s.p,{children:"\u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Feature Toggle \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 Permissions."})]})}function c(e={}){const{wrapper:s}={...(0,t.M)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},2172:(e,s,r)=>{r.d(s,{I:()=>a,M:()=>o});var n=r(1504);const t={},i=n.createContext(t);function o(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5958da79.76b4a626.js b/assets/js/5958da79.76b4a626.js deleted file mode 100644 index c729d0f..0000000 --- a/assets/js/5958da79.76b4a626.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[908],{6384:(e,s,r)=>{r.r(s),r.d(s,{assets:()=>g,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=r(7624),n=r(2172);const i={sidebar_position:12},o="Feature Toggle \u0438 Permissions",a={id:"permissions/featureToggle",title:"Feature Toggle \u0438 Permissions",description:"Feature Toggle \u0438 Permissions - \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.",source:"@site/docs/permissions/featureToggle.md",sourceDirName:"permissions",slug:"/permissions/featureToggle",permalink:"/guides/docs/permissions/featureToggle",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/permissions/featureToggle.md",tags:[],version:"current",sidebarPosition:12,frontMatter:{sidebar_position:12},sidebar:"tutorialSidebar",previous:{title:"2FA (Two-factor Auth)",permalink:"/guides/docs/permissions/2fa"},next:{title:"Issues",permalink:"/guides/docs/issues"}},g={},l=[{value:"Permissions \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Feature Toggle",id:"permissions-\u043c\u043e\u0436\u0435\u0442-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c-feature-toggle",level:2}];function u(e){const s={a:"a",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,n.M)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"feature-toggle-\u0438-permissions",children:"Feature Toggle \u0438 Permissions"}),"\n",(0,t.jsx)(s.p,{children:"Feature Toggle \u0438 Permissions - \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438."}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Feature Toggle"})," \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430. \u0424\u0438\u0447\u0430 \u0444\u043b\u0430\u0433\u0438 - \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u044b.\n\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0444\u043e\u043a\u0443\u0441\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430."]}),"\n",(0,t.jsxs)(s.p,{children:["\u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c ",(0,t.jsx)(s.strong,{children:"Permissions"})," - \u044d\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439."]}),"\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"\u041d\u0435\u043b\u044c\u0437\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 Feature Toggle \u0438 Permissions \u0432 \u043e\u0434\u043d\u043e\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438"}),", \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430."]}),"\n",(0,t.jsx)(s.h2,{id:"permissions-\u043c\u043e\u0436\u0435\u0442-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c-feature-toggle",children:"Permissions \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Feature Toggle"}),"\n",(0,t.jsxs)(s.p,{children:["Permissions \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Feature Toggle \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 Feature Toggle \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 ",(0,t.jsx)(s.a,{href:"https://martinfowler.com/articles/feature-toggles.html#CategoriesOfToggles:~:text=Operations%20person%20happy.-,Permissioning%20Toggles,-turning%20on%20new",children:"Permissioning Toggles"}),"."]}),"\n",(0,t.jsx)(s.p,{children:"\u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Feature Toggle \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 Permissions."})]})}function c(e={}){const{wrapper:s}={...(0,n.M)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},2172:(e,s,r)=>{r.d(s,{I:()=>a,M:()=>o});var t=r(1504);const n={},i=t.createContext(n);function o(e){const s=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),t.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5cfcab96.30c4c836.js b/assets/js/5cfcab96.30c4c836.js deleted file mode 100644 index 6000f69..0000000 --- a/assets/js/5cfcab96.30c4c836.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[152],{6276:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var n=t(7624),r=t(2172);const i={sidebar_position:5},o="Issues",a={id:"issues",title:"Issues",description:"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u0438\u0431\u043e \u043d\u0430 \u0434\u043e\u0441\u043a\u0435 Frontend.Shared, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 PR \u043d\u0430 Github.",source:"@site/docs/issues.md",sourceDirName:".",slug:"/issues",permalink:"/guides/docs/issues",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/issues.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Feature Toggle \u0438 Permissions",permalink:"/guides/docs/permissions/featureToggle"}},u={},c=[];function d(e){const s={a:"a",h1:"h1",p:"p",...(0,r.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"issues",children:"Issues"}),"\n",(0,n.jsxs)(s.p,{children:["\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u0438\u0431\u043e \u043d\u0430 \u0434\u043e\u0441\u043a\u0435 ",(0,n.jsx)(s.a,{href:"https://track.astral.ru/soft/secure/RapidBoard.jspa?rapidView=142",children:"Frontend.Shared"}),", \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 PR \u043d\u0430 ",(0,n.jsx)(s.a,{href:"https://github.com/kaluga-astral/guides",children:"Github"}),"."]})]})}function l(e={}){const{wrapper:s}={...(0,r.M)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},2172:(e,s,t)=>{t.d(s,{I:()=>a,M:()=>o});var n=t(1504);const r={},i=n.createContext(r);function o(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function a(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5cfcab96.50133373.js b/assets/js/5cfcab96.50133373.js new file mode 100644 index 0000000..49b448e --- /dev/null +++ b/assets/js/5cfcab96.50133373.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[152],{6276:(s,e,t)=>{t.r(e),t.d(e,{assets:()=>u,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var n=t(7624),r=t(2172);const i={sidebar_position:5},o="Issues",a={id:"issues",title:"Issues",description:"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u0438\u0431\u043e \u043d\u0430 \u0434\u043e\u0441\u043a\u0435 Frontend.Shared, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 PR \u043d\u0430 Github.",source:"@site/docs/issues.md",sourceDirName:".",slug:"/issues",permalink:"/guides/docs/issues",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/issues.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Nextjs. SSR \u0438 SSG",permalink:"/guides/docs/env/ssr"}},u={},c=[];function d(s){const e={a:"a",h1:"h1",p:"p",...(0,r.M)(),...s.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"issues",children:"Issues"}),"\n",(0,n.jsxs)(e.p,{children:["\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u0438\u0431\u043e \u043d\u0430 \u0434\u043e\u0441\u043a\u0435 ",(0,n.jsx)(e.a,{href:"https://track.astral.ru/soft/secure/RapidBoard.jspa?rapidView=142",children:"Frontend.Shared"}),", \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 PR \u043d\u0430 ",(0,n.jsx)(e.a,{href:"https://github.com/kaluga-astral/guides",children:"Github"}),"."]})]})}function l(s={}){const{wrapper:e}={...(0,r.M)(),...s.components};return e?(0,n.jsx)(e,{...s,children:(0,n.jsx)(d,{...s})}):d(s)}},2172:(s,e,t)=>{t.d(e,{I:()=>a,M:()=>o});var n=t(1504);const r={},i=n.createContext(r);function o(s){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof s?s(e):{...e,...s}}),[e,s])}function a(s){let e;return e=s.disableParentContext?"function"==typeof s.components?s.components(r):s.components||r:o(s.components),n.createElement(i.Provider,{value:e},s.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.7eb35441.js b/assets/js/935f2afb.7eb35441.js deleted file mode 100644 index 329040b..0000000 --- a/assets/js/935f2afb.7eb35441.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[696],{5988:s=>{s.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Intro","href":"/guides/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Permissions. \u041f\u0430\u0442\u0442\u0435\u0440\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Intro","href":"/guides/docs/permissions/intro","docId":"permissions/intro","unlisted":false},{"type":"link","label":"\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u043e ABAC \u0438 XAML","href":"/guides/docs/permissions/core","docId":"permissions/core","unlisted":false},{"type":"link","label":"\u0415\u0434\u0438\u043d\u044b\u0439 Permissions Module","href":"/guides/docs/permissions/permissionsModule","docId":"permissions/permissionsModule","unlisted":false},{"type":"link","label":"Policies. \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/policies","docId":"permissions/policies","unlisted":false},{"type":"link","label":"\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/permissionsFormation","docId":"permissions/permissionsFormation","unlisted":false},{"type":"link","label":"Reasons. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u043e\u0442\u043a\u0430\u0437\u0430 \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435","href":"/guides/docs/permissions/reasons","docId":"permissions/reasons","unlisted":false},{"type":"link","label":"Rules. \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/rules","docId":"permissions/rules","unlisted":false},{"type":"link","label":"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/preparingData","docId":"permissions/preparingData","unlisted":false},{"type":"link","label":"Route Guards. \u0414\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u0440\u0443\u0442\u0430\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f","href":"/guides/docs/permissions/routes","docId":"permissions/routes","unlisted":false},{"type":"link","label":"\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/testing","docId":"permissions/testing","unlisted":false},{"type":"link","label":"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430","href":"/guides/docs/permissions/example","docId":"permissions/example","unlisted":false},{"type":"link","label":"2FA (Two-factor Auth)","href":"/guides/docs/permissions/2fa","docId":"permissions/2fa","unlisted":false},{"type":"link","label":"Feature Toggle \u0438 Permissions","href":"/guides/docs/permissions/featureToggle","docId":"permissions/featureToggle","unlisted":false}],"href":"/guides/docs/category/permissions-\u043f\u0430\u0442\u0442\u0435\u0440\u043d-\u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432-\u043d\u0430-\u043a\u043b\u0438\u0435\u043d\u0442\u0435"},{"type":"link","label":"Issues","href":"/guides/docs/issues","docId":"issues","unlisted":false}]},"docs":{"intro":{"id":"intro","title":"Intro","description":"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0438\u0447\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 frontend \u0432 \u0410\u0441\u0442\u0440\u0430\u043b-\u0421\u043e\u0444\u0442.","sidebar":"tutorialSidebar"},"issues":{"id":"issues","title":"Issues","description":"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u0438\u0431\u043e \u043d\u0430 \u0434\u043e\u0441\u043a\u0435 Frontend.Shared, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 PR \u043d\u0430 Github.","sidebar":"tutorialSidebar"},"permissions/2fa":{"id":"permissions/2fa","title":"2FA (Two-factor Auth)","description":"Permissions \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0430 \u0441 2FAService.","sidebar":"tutorialSidebar"},"permissions/core":{"id":"permissions/core","title":"\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u043e ABAC \u0438 XAML","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0431\u0435\u0440\u0435\u0442 \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b ABAC (Attribute-Based Access Control) \u0438 XAML.","sidebar":"tutorialSidebar"},"permissions/example":{"id":"permissions/example","title":"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430","description":"Permissions Module","sidebar":"tutorialSidebar"},"permissions/featureToggle":{"id":"permissions/featureToggle","title":"Feature Toggle \u0438 Permissions","description":"Feature Toggle \u0438 Permissions - \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.","sidebar":"tutorialSidebar"},"permissions/intro":{"id":"permissions/intro","title":"Intro","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0438\u0431\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.","sidebar":"tutorialSidebar"},"permissions/permissionsFormation":{"id":"permissions/permissionsFormation","title":"\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"Permission - \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443, \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438.","sidebar":"tutorialSidebar"},"permissions/permissionsModule":{"id":"permissions/permissionsModule","title":"\u0415\u0434\u0438\u043d\u044b\u0439 Permissions Module","description":"\u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c, \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 permissions:","sidebar":"tutorialSidebar"},"permissions/policies":{"id":"permissions/policies","title":"Policies. \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"Policies \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442 permissions \u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u043e\u0441\u0442\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 permissions \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.","sidebar":"tutorialSidebar"},"permissions/preparingData":{"id":"permissions/preparingData","title":"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"\u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043d\u0443\u0436\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0438\u0437 API.","sidebar":"tutorialSidebar"},"permissions/reasons":{"id":"permissions/reasons","title":"Reasons. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u043e\u0442\u043a\u0430\u0437\u0430 \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435","description":"\u041a\u0430\u0436\u0434\u044b\u0439 permission \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442:","sidebar":"tutorialSidebar"},"permissions/routes":{"id":"permissions/routes","title":"Route Guards. \u0414\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u0440\u0443\u0442\u0430\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f","description":"Route Guard - \u044d\u0442\u043e react-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0440\u0443\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.","sidebar":"tutorialSidebar"},"permissions/rules":{"id":"permissions/rules","title":"Rules. \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"Rule - \u044d\u0442\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f permissions.","sidebar":"tutorialSidebar"},"permissions/testing":{"id":"permissions/testing","title":"\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442 \u0442\u0435\u0441\u0442\u0430\u043c\u0438.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.947b42d2.js b/assets/js/935f2afb.947b42d2.js new file mode 100644 index 0000000..6a577a4 --- /dev/null +++ b/assets/js/935f2afb.947b42d2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[696],{5988:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Intro","href":"/guides/docs/intro","docId":"intro","unlisted":false},{"type":"category","label":"Permissions. \u041f\u0430\u0442\u0442\u0435\u0440\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Intro","href":"/guides/docs/permissions/intro","docId":"permissions/intro","unlisted":false},{"type":"link","label":"\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u043e ABAC \u0438 XAML","href":"/guides/docs/permissions/core","docId":"permissions/core","unlisted":false},{"type":"link","label":"\u0415\u0434\u0438\u043d\u044b\u0439 Permissions Module","href":"/guides/docs/permissions/permissionsModule","docId":"permissions/permissionsModule","unlisted":false},{"type":"link","label":"Policies. \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/policies","docId":"permissions/policies","unlisted":false},{"type":"link","label":"\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/permissionsFormation","docId":"permissions/permissionsFormation","unlisted":false},{"type":"link","label":"Reasons. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u043e\u0442\u043a\u0430\u0437\u0430 \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435","href":"/guides/docs/permissions/reasons","docId":"permissions/reasons","unlisted":false},{"type":"link","label":"Rules. \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/rules","docId":"permissions/rules","unlisted":false},{"type":"link","label":"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/preparingData","docId":"permissions/preparingData","unlisted":false},{"type":"link","label":"Route Guards. \u0414\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u0440\u0443\u0442\u0430\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f","href":"/guides/docs/permissions/routes","docId":"permissions/routes","unlisted":false},{"type":"link","label":"\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","href":"/guides/docs/permissions/testing","docId":"permissions/testing","unlisted":false},{"type":"link","label":"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430","href":"/guides/docs/permissions/example","docId":"permissions/example","unlisted":false},{"type":"link","label":"2FA (Two-factor Auth)","href":"/guides/docs/permissions/2fa","docId":"permissions/2fa","unlisted":false},{"type":"link","label":"Feature Toggle \u0438 Permissions","href":"/guides/docs/permissions/featureToggle","docId":"permissions/featureToggle","unlisted":false}],"href":"/guides/docs/category/permissions-\u043f\u0430\u0442\u0442\u0435\u0440\u043d-\u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432-\u043d\u0430-\u043a\u043b\u0438\u0435\u043d\u0442\u0435"},{"type":"category","label":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Intro","href":"/guides/docs/env/intro","docId":"env/intro","unlisted":false},{"type":"link","label":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435","href":"/guides/docs/env/arch","docId":"env/arch","unlisted":false},{"type":"link","label":"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PUBLIC \u0438 PRIVATE env","href":"/guides/docs/env/safety","docId":"env/safety","unlisted":false},{"type":"link","label":"CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env","href":"/guides/docs/env/csr","docId":"env/csr","unlisted":false},{"type":"link","label":"Nextjs. SSR \u0438 SSG","href":"/guides/docs/env/ssr","docId":"env/ssr","unlisted":false}],"href":"/guides/docs/category/\u0440\u0430\u0431\u043e\u0442\u0430-\u0441-env"},{"type":"link","label":"Issues","href":"/guides/docs/issues","docId":"issues","unlisted":false}]},"docs":{"env/arch":{"id":"env/arch","title":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435","description":"\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u0438\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:","sidebar":"tutorialSidebar"},"env/csr":{"id":"env/csr","title":"CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env","description":"\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 CSR \u0438 Nginx \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u043a\u0438.","sidebar":"tutorialSidebar"},"env/intro":{"id":"env/intro","title":"Intro","description":"\u0420\u0430\u0437\u0434\u0435\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:","sidebar":"tutorialSidebar"},"env/safety":{"id":"env/safety","title":"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PUBLIC \u0438 PRIVATE env","description":"\u0414\u043b\u044f env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 PUBLIC_:","sidebar":"tutorialSidebar"},"env/ssr":{"id":"env/ssr","title":"Nextjs. SSR \u0438 SSG","description":"\u0415\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nextjs, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 env, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a.","sidebar":"tutorialSidebar"},"intro":{"id":"intro","title":"Intro","description":"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0438\u0447\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 frontend \u0432 \u0410\u0441\u0442\u0440\u0430\u043b-\u0421\u043e\u0444\u0442.","sidebar":"tutorialSidebar"},"issues":{"id":"issues","title":"Issues","description":"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u0438\u0431\u043e \u043d\u0430 \u0434\u043e\u0441\u043a\u0435 Frontend.Shared, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 PR \u043d\u0430 Github.","sidebar":"tutorialSidebar"},"permissions/2fa":{"id":"permissions/2fa","title":"2FA (Two-factor Auth)","description":"Permissions \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0430 \u0441 2FAService.","sidebar":"tutorialSidebar"},"permissions/core":{"id":"permissions/core","title":"\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0435\u043d\u043e ABAC \u0438 XAML","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0431\u0435\u0440\u0435\u0442 \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b ABAC (Attribute-Based Access Control) \u0438 XAML.","sidebar":"tutorialSidebar"},"permissions/example":{"id":"permissions/example","title":"\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430","description":"Permissions Module","sidebar":"tutorialSidebar"},"permissions/featureToggle":{"id":"permissions/featureToggle","title":"Feature Toggle \u0438 Permissions","description":"Feature Toggle \u0438 Permissions - \u044d\u0442\u043e \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438.","sidebar":"tutorialSidebar"},"permissions/intro":{"id":"permissions/intro","title":"Intro","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u0438\u0431\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.","sidebar":"tutorialSidebar"},"permissions/permissionsFormation":{"id":"permissions/permissionsFormation","title":"\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"Permission - \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443, \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438.","sidebar":"tutorialSidebar"},"permissions/permissionsModule":{"id":"permissions/permissionsModule","title":"\u0415\u0434\u0438\u043d\u044b\u0439 Permissions Module","description":"\u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c, \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 permissions:","sidebar":"tutorialSidebar"},"permissions/policies":{"id":"permissions/policies","title":"Policies. \u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"Policies \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442 permissions \u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u043e\u0441\u0442\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 permissions \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.","sidebar":"tutorialSidebar"},"permissions/preparingData":{"id":"permissions/preparingData","title":"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"\u0414\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043d\u0443\u0436\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0438\u0437 API.","sidebar":"tutorialSidebar"},"permissions/reasons":{"id":"permissions/reasons","title":"Reasons. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u043e\u0442\u043a\u0430\u0437\u0430 \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435","description":"\u041a\u0430\u0436\u0434\u044b\u0439 permission \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442:","sidebar":"tutorialSidebar"},"permissions/routes":{"id":"permissions/routes","title":"Route Guards. \u0414\u043e\u0441\u0442\u0443\u043f\u044b \u043a \u0440\u0443\u0442\u0430\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f","description":"Route Guard - \u044d\u0442\u043e react-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0440\u0443\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.","sidebar":"tutorialSidebar"},"permissions/rules":{"id":"permissions/rules","title":"Rules. \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"Rule - \u044d\u0442\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f permissions.","sidebar":"tutorialSidebar"},"permissions/testing":{"id":"permissions/testing","title":"\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432","description":"\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u0432 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043a\u0440\u044b\u0442 \u0442\u0435\u0441\u0442\u0430\u043c\u0438.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/98b049bc.f3532d1c.js b/assets/js/98b049bc.f3532d1c.js new file mode 100644 index 0000000..a79bd08 --- /dev/null +++ b/assets/js/98b049bc.f3532d1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[336],{7004:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>a,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var n=t(7624),r=t(2172);const i={sidebar_position:4},o="Nextjs. SSR \u0438 SSG",c={id:"env/ssr",title:"Nextjs. SSR \u0438 SSG",description:"\u0415\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nextjs, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 env, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a.",source:"@site/docs/env/ssr.md",sourceDirName:"env",slug:"/env/ssr",permalink:"/guides/docs/env/ssr",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/env/ssr.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env",permalink:"/guides/docs/env/csr"},next:{title:"Issues",permalink:"/guides/docs/issues"}},a={},d=[];function u(e){const s={h1:"h1",p:"p",...(0,r.M)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"nextjs-ssr-\u0438-ssg",children:"Nextjs. SSR \u0438 SSG"}),"\n",(0,n.jsx)(s.p,{children:"\u0415\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nextjs, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 env, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a."}),"\n",(0,n.jsx)(s.p,{children:"\u041f\u0440\u0438 SSR \u0438 SSG env \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u0438 \u0431\u0438\u043b\u0434\u0435."})]})}function l(e={}){const{wrapper:s}={...(0,r.M)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},2172:(e,s,t)=>{t.d(s,{I:()=>c,M:()=>o});var n=t(1504);const r={},i=n.createContext(r);function o(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a4fd6a64.0ee71f00.js b/assets/js/a4fd6a64.0ee71f00.js new file mode 100644 index 0000000..9e6e0ec --- /dev/null +++ b/assets/js/a4fd6a64.0ee71f00.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[848],{236:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>u,frontMatter:()=>c,metadata:()=>o,toc:()=>a});var t=i(7624),s=i(2172);const c={sidebar_position:1},r="\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435",o={id:"env/arch",title:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435",description:"\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u0438\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:",source:"@site/docs/env/arch.md",sourceDirName:"env",slug:"/env/arch",permalink:"/guides/docs/env/arch",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/env/arch.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Intro",permalink:"/guides/docs/env/intro"},next:{title:"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PUBLIC \u0438 PRIVATE env",permalink:"/guides/docs/env/safety"}},d={},a=[{value:"ConfigService",id:"configservice",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.M)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"\u0440\u0430\u0431\u043e\u0442\u0430-\u0441-env-\u0432-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435",children:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435"}),"\n",(0,t.jsx)(n.p,{children:"\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u0438\u043b\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\u0412 vite \u0447\u0435\u0440\u0435\u0437 ",(0,t.jsx)(n.code,{children:"import.meta.env"})]}),"\n",(0,t.jsxs)(n.li,{children:["\u0412 webpack \u0447\u0435\u0440\u0435\u0437 ",(0,t.jsx)(n.code,{children:"process.env"})]}),"\n",(0,t.jsxs)(n.li,{children:["\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0434\u043b\u044f CSR \u0447\u0435\u0440\u0435\u0437 ",(0,t.jsx)(n.code,{children:"window.__ENV__"})]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["\u0412\u0441\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443 env \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 ",(0,t.jsx)(n.a,{href:"https://industrious-search-cdf.notion.site/Application-cc27fa7727fd49599caafc2f2d76ae23",children:"application \u0441\u043b\u043e\u044f"}),".\n\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 application \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043e\u0442 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u0438\u043b\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 env."]}),"\n",(0,t.jsx)(n.h2,{id:"configservice",children:"ConfigService"}),"\n",(0,t.jsxs)(n.p,{children:["\u0421\u043b\u043e\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0442 ",(0,t.jsx)(n.strong,{children:"application"}),", \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 env \u0447\u0435\u0440\u0435\u0437 ",(0,t.jsx)(n.code,{children:"ConfigService"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e ConfigService \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u0432 ",(0,t.jsx)(n.a,{href:"https://industrious-search-cdf.notion.site/Config-cbfc6d248c5f47cd80d35f0f2cc95281",children:"\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438"}),"."]})]})}function u(e={}){const{wrapper:n}={...(0,s.M)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},2172:(e,n,i)=>{i.d(n,{I:()=>o,M:()=>r});var t=i(1504);const s={},c=t.createContext(s);function r(e){const n=t.useContext(c);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ea6a2d72.dc36da63.js b/assets/js/ea6a2d72.dc36da63.js new file mode 100644 index 0000000..546d529 --- /dev/null +++ b/assets/js/ea6a2d72.dc36da63.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[90],{3224:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var i=s(7624),t=s(2172);const r={sidebar_position:2},c="\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PUBLIC \u0438 PRIVATE env",d={id:"env/safety",title:"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PUBLIC \u0438 PRIVATE env",description:"\u0414\u043b\u044f env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 PUBLIC_:",source:"@site/docs/env/safety.md",sourceDirName:"env",slug:"/env/safety",permalink:"/guides/docs/env/safety",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/env/safety.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 env \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435",permalink:"/guides/docs/env/arch"},next:{title:"CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env",permalink:"/guides/docs/env/csr"}},o={},l=[{value:"\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f",id:"\u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f",level:2},{value:"CSR",id:"csr",level:2}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,t.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-public-\u0438-private-env",children:"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PUBLIC \u0438 PRIVATE env"}),"\n",(0,i.jsxs)(n.p,{children:["\u0414\u043b\u044f env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ",(0,i.jsx)(n.code,{children:"PUBLIC_"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"PUBLIC_API_URL"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"PUBLIC_BRAND"})}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["\u0414\u043b\u044f env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0431\u0438\u043b\u0434\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ",(0,i.jsx)(n.code,{children:"PRIVATE_"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"PRIVATE_RELEASE_MANAGER_TOKEN"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"\u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f",children:"\u041c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044f"}),"\n",(0,i.jsx)(n.p,{children:"\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0442\u043e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0439\u0442\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e env \u0445\u0440\u0430\u043d\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0431\u0438\u043b\u0434 \u0438\u043b\u0438 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435."}),"\n",(0,i.jsxs)(n.p,{children:["\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 Nextjs \u0438 Vite \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043b\u044f env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b: ",(0,i.jsx)(n.code,{children:"NEXT_PUBLIC | NEXT_PRIVATE"}),", ",(0,i.jsx)(n.code,{children:"VITE_"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"csr",children:"CSR"}),"\n",(0,i.jsxs)(n.p,{children:["\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 ",(0,i.jsx)(n.code,{children:"webpack"}),", \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f\u043c \u043f\u043e \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044e."]}),"\n",(0,i.jsxs)(n.p,{children:["\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 ",(0,i.jsx)(n.code,{children:"vite"}),", \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ",(0,i.jsx)(n.a,{href:"https://vitejs.dev/config/shared-options.html#envprefix",children:"envPrefix"})," \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430."]})]})}function h(e={}){const{wrapper:n}={...(0,t.M)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},2172:(e,n,s)=>{s.d(n,{I:()=>d,M:()=>c});var i=s(1504);const t={},r=i.createContext(t);function c(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f1c1be32.8f778ef4.js b/assets/js/f1c1be32.8f778ef4.js new file mode 100644 index 0000000..60ca2b0 --- /dev/null +++ b/assets/js/f1c1be32.8f778ef4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastral_guides=self.webpackChunkastral_guides||[]).push([[484],{1324:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>t,contentTitle:()=>c,default:()=>x,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var d=i(7624),l=i(2172);const s={sidebar_position:3},c="CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env",r={id:"env/csr",title:"CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env",description:"\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 CSR \u0438 Nginx \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u043a\u0438.",source:"@site/docs/env/csr.md",sourceDirName:"env",slug:"/env/csr",permalink:"/guides/docs/env/csr",draft:!1,unlisted:!1,editUrl:"https://github.com/kaluga-astral/guides/tree/main/docs/docs/env/csr.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PUBLIC \u0438 PRIVATE env",permalink:"/guides/docs/env/safety"},next:{title:"Nextjs. SSR \u0438 SSG",permalink:"/guides/docs/env/ssr"}},t={},h=[{value:"\u041f\u0440\u0438\u043c\u0435\u0440",id:"\u043f\u0440\u0438\u043c\u0435\u0440",level:2},{value:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f env \u0432 build time",id:"\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430-\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f-env-\u0432-build-time",level:2},{value:"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f index.html \u0438 inject env",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438-inject-env",level:2},{value:"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f index.html \u0438\u0437 index.template.html",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438\u0437-indextemplatehtml",level:3},{value:"\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 index.template.html",id:"\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435-indextemplatehtml",level:4},{value:"\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d index.template.html \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 index.html \u0432 .gitignore?",id:"\u0437\u0430\u0447\u0435\u043c-\u043d\u0443\u0436\u0435\u043d-indextemplatehtml-\u0438-\u043f\u043e\u0447\u0435\u043c\u0443-indexhtml-\u0432-gitignore",level:4},{value:"\u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 inject env \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f bash \u0441\u043a\u0440\u0438\u043f\u0442\u044b.",id:"\u0434\u043b\u044f-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438-\u0438-inject-env-\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f-bash-\u0441\u043a\u0440\u0438\u043f\u0442\u044b",level:4},{value:"Dev Mode",id:"dev-mode",level:2},{value:"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f index.html. generateEnv.dev.sh \u0441\u043a\u0440\u0438\u043f\u0442",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-generateenvdevsh-\u0441\u043a\u0440\u0438\u043f\u0442",level:3},{value:"Prod Mode",id:"prod-mode",level:2},{value:"\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f index.html",id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml",level:3},{value:"Dockerfile",id:"dockerfile",level:4},{value:"\u0421\u043a\u0440\u0438\u043f\u0442 startup.prod.sh",id:"\u0441\u043a\u0440\u0438\u043f\u0442-startupprodsh",level:4},{value:"\u041f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 nginx",id:"\u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445-\u0432-nginx",level:3},{value:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 env \u0438\u0437 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430",id:"\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435-env-\u0438\u0437-\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e-\u0444\u0430\u0439\u043b\u0430",level:2},{value:"\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 inject env \u0432 index.html",id:"\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430-inject-env-\u0432-indexhtml",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,l.M)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(n.h1,{id:"csr--nginx-\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435-env",children:"CSR + Nginx. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 env"}),"\n",(0,d.jsx)(n.p,{children:"\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 CSR \u0438 Nginx \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0430\u0447\u0438 \u0441\u0442\u0430\u0442\u0438\u043a\u0438."}),"\n",(0,d.jsx)(n.h2,{id:"\u043f\u0440\u0438\u043c\u0435\u0440",children:"\u041f\u0440\u0438\u043c\u0435\u0440"}),"\n",(0,d.jsxs)(n.p,{children:["\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 ",(0,d.jsx)(n.a,{href:"https://github.com/kaluga-astral/vite-boilerplate/tree/main",children:"vite-boilerplate"}),"."]}),"\n",(0,d.jsx)(n.h2,{id:"\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430-\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f-env-\u0432-build-time",children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f env \u0432 build time"}),"\n",(0,d.jsx)(n.p,{children:"\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 env \u0432 build time - \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434."}),"\n",(0,d.jsx)(n.p,{children:"\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:"}),"\n",(0,d.jsxs)(n.ol,{children:["\n",(0,d.jsx)(n.li,{children:"\u0421\u0431\u043e\u0440\u0449\u0438\u043a \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442"}),"\n",(0,d.jsxs)(n.li,{children:["\u041b\u0438\u0431\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 env \u0432 ",(0,d.jsx)(n.code,{children:"import.meta.env"})," (vite), \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0435\u0442 replace ",(0,d.jsx)(n.code,{children:"process.env"})," \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 js \u043a\u043e\u0434\u0435 (webpack)"]}),"\n",(0,d.jsx)(n.li,{children:"\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 js"}),"\n"]}),"\n",(0,d.jsx)(n.p,{children:"\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b:"}),"\n",(0,d.jsxs)(n.ul,{children:["\n",(0,d.jsx)(n.li,{children:"\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 env \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435"}),"\n",(0,d.jsx)(n.li,{children:"\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 white label, \u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u0440\u0435\u043d\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 docker image.\n\u042d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f"}),"\n"]}),"\n",(0,d.jsx)(n.p,{children:"\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c inject env \u0432 html \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430."}),"\n",(0,d.jsxs)(n.h2,{id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438-inject-env",children:["\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f ",(0,d.jsx)(n.code,{children:"index.html"})," \u0438 inject env"]}),"\n",(0,d.jsxs)(n.p,{children:["\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 docker \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c ",(0,d.jsx)(n.code,{children:"index.html"})," \u0438 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 html env \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435."]}),"\n",(0,d.jsxs)(n.h3,{id:"\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f-indexhtml-\u0438\u0437-indextemplatehtml",children:["\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f ",(0,d.jsx)(n.code,{children:"index.html"})," \u0438\u0437 ",(0,d.jsx)(n.code,{children:"index.template.html"})]}),"\n",(0,d.jsxs)(n.p,{children:["\u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e ",(0,d.jsx)(n.code,{children:"index.template.html"})," - \u044d\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d html, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d ",(0,d.jsx)(n.code,{children:"index.html"}),"."]}),"\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"index.html"})," \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 ",(0,d.jsx)(n.code,{children:".gitignore"}),"."]}),"\n",(0,d.jsxs)(n.h4,{id:"\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435-indextemplatehtml",children:["\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 ",(0,d.jsx)(n.code,{children:"index.template.html"})]}),"\n",(0,d.jsx)(n.p,{children:(0,d.jsx)(n.strong,{children:(0,d.jsx)(n.a,{href:"https://github.com/kaluga-astral/vite-boilerplate/blob/main/index.template.html",children:"\u041f\u0440\u0438\u043c\u0435\u0440 index.template.html"})})}),"\n",(0,d.jsxs)(n.p,{children:[(0,d.jsx)(n.code,{children:"index.template.html"})," \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0438 ",(0,d.jsx)(n.code,{children:" - + + -
Skip to main content

Permissions. Паттерн доступов на клиенте

Паттерн реализации системы доступов на клиенте

+
Skip to main content

Permissions. Паттерн доступов на клиенте

Паттерн реализации системы доступов на клиенте

\ No newline at end of file diff --git "a/docs/category/\321\200\320\260\320\261\320\276\321\202\320\260-\321\201-env.html" "b/docs/category/\321\200\320\260\320\261\320\276\321\202\320\260-\321\201-env.html" new file mode 100644 index 0000000..3448811 Binary files /dev/null and "b/docs/category/\321\200\320\260\320\261\320\276\321\202\320\260-\321\201-env.html" differ diff --git a/docs/env/arch.html b/docs/env/arch.html new file mode 100644 index 0000000..8e10bcc --- /dev/null +++ b/docs/env/arch.html @@ -0,0 +1,24 @@ + + + + + +Работа с env в архитектуре | Astral.Frontend Guides + + + + +
Skip to main content

Работа с env в архитектуре

+

В зависимости от сборщика или фреймворка, env переменные доставляются в приложение разным способом:

+
    +
  • В vite через import.meta.env
  • +
  • В webpack через process.env
  • +
  • В нашем подходе для CSR через window.__ENV__
  • +
+

Все обращение к источнику env должны происходить только на уровне application слоя. +Работа с env только на уровне application позволяет не зависеть приложению от сборщика или механизма доставки env.

+

ConfigService

+

Слои приложения, отличные от application, должны получать данные из env через ConfigService.

+

Подробнее о ConfigService читайте в документации.

+ + \ No newline at end of file diff --git a/docs/env/csr.html b/docs/env/csr.html new file mode 100644 index 0000000..19a7e4a --- /dev/null +++ b/docs/env/csr.html @@ -0,0 +1,102 @@ + + + + + +CSR + Nginx. Динамические env | Astral.Frontend Guides + + + + +
Skip to main content

CSR + Nginx. Динамические env

+

В данном разделе описана инструкция загрузки env переменных при использовании CSR и Nginx для раздачи статики.

+

Пример

+

Пример реализован в vite-boilerplate.

+

Проблема получения env в build time

+

Получение env в build time - это классический подход.

+

Работает следующим образом:

+
    +
  1. Сборщик при запуске получает
  2. +
  3. Либо помещает полученные env в import.meta.env (vite), либо делает replace process.env переменных на их значения непосредственно в js коде (webpack)
  4. +
  5. Переменные доступны в браузере при выполнении js
  6. +
+

Проблемы:

+
    +
  • Для изменения значений env необходимо заново пересобирать приложение
  • +
  • Если в приложении есть поддержка white label, то для каждого бренда необходимо собирать отдельный docker image. +Это сильно увеличивает время сборки приложения и количество ресурсов, необходимое для поддержки и развертывания
  • +
+

Для решения описанных проблем необходимо делать inject env в html при запуске docker контейнера.

+

Генерация index.html и inject env

+

Для того чтобы при изменении env переменных не приходилось заново делать сборку, необходимо при запуске docker контейнера генерировать index.html и инжектировать в html env переменные.

+

Генерация index.html из index.template.html

+

В репозитории должен находиться только index.template.html - это шаблон html, на основе которого будет построен index.html.

+

index.html должен быть добавлен в .gitignore.

+

Содержимое index.template.html

+

Пример index.template.html

+

index.template.html содержит всю необходимую для приложения разметку и <script> в <head>:

+
<script>
<!-- При запуске dev команды или запуске docker контейнера в __ENV__ подставятся значения из окружения -->
window.__ENV__={};
</script>
+

Зачем нужен index.template.html и почему index.html в .gitignore?

+

При запуске dev-server должно происходить inject env переменных в index.html, +если файл не будет в .gitignore, то в репозиторий могут случайно попасть изменения, которых разработчик не делал.

+

Для генерации и inject env используются bash скрипты.

+

Bash используется по причине того, что для CSR в компании используется Nginx. +Это означает, что в итоговом docker контейнере нет nodejs, а если добавить в образ nodejs, то он вырастет в разы по объему, что повлияет на скорость сборок и оптимизацию хранилища.

+

Dev Mode

+

Генерация index.html. generateEnv.dev.sh скрипт

+

Пример generateEnv.dev.sh

+

В режиме разработки необходимо, чтобы перед каждым запуском dev-server выполнялся bash скрипт, который:

+
    +
  1. Парсит все переменные из файла .env.local (или .env.dev) с префиксами PUBLIC_
  2. +
  3. Создает в директории для раздачи статики index.html с копией содержимого из index.template.html. +Для vite директория для раздачи статики - это корень приложения. Для webpack - public директория
  4. +
  5. Заменяет в index.html window.__ENV__={} на:
  6. +
+
window.__ENV__={"PUBLIC_API_URL":"https://astral.ru"};
+

Prod Mode

+

Генерация index.html

+

Dockerfile

+

При запуске docker контейнера необходимо запускать bash скрипт, который сгенерирует index.html файл и инжектирует в него env. +Для этого в Dockerfile необходимо добавить команду выполнения скрипта при запуске контейнера:

+
FROM node:22-alpine AS build

WORKDIR /usr/src/app

COPY package.json package-lock.json* ./

COPY . .

RUN npm i --production

RUN npm run build

FROM fholzer/nginx-brotli:v1.19.1

COPY .nginx/nginx.conf.template /etc/nginx/nginx.conf.template
COPY --from=build /usr/src/app/dist /usr/share/nginx/html

# Запускаем контейнер при помощи exec в shell оболочке, чтобы иметь доступ к env
ENTRYPOINT ["sh", "/usr/share/nginx/html/scripts/startup.prod.sh"]
+

Скрипт startup.prod.sh

+

Пример startup.prod.sh

+

Скрипт startup.prod.sh выполняет следующие действия:

+
    +
  1. Достает из текущего окружения все env переменные с префиксом PUBLIC_
  2. +
  3. Создает index.html с копией содержимого из index.template.html
  4. +
  5. Заменяет в index.html window.__ENV__={} на:
  6. +
+
window.__ENV__={"PUBLIC_API_URL":"https://astral.ru"};
+
    +
  1. Подменяет переменные для nginx на их значения. Читай об этом подробнее здесь
  2. +
  3. Запускает nginx
  4. +
+

Подстановка переменных в nginx

+

В зависимости от env в проекте может изменяться nginx.conf.

+

Для того чтобы nginx.conf менялся при запуске необходимо:

+
    +
  1. Создать в проекте файл nginx.conf.template. Из него будет генерироваться уже настоящий nginx.conf.
  2. +
  3. Заменить динамические участки конфига на ${PUBLIC_WS_URL}. Пример:
  4. +
+
http {
...

server {
listen 80;
listen [::]:80;

...

add_header Content-Security-Policy connect-src 'self' ${PUBLIC_WS_URL};

...
}
}
+
    +
  1. Добавить в startup.prod.sh следующий код с переменными, которые необходимо подменить:
  2. +
+
# Необходимо экспортировать, тк envsubst является разветвленным процессом и не знает неэкспортируемых переменных
export PUBLIC_WS_URL

# Подмена указанных переменных в nginx.conf.template и копирование всего файла в nginx.conf
envsubst "${PUBLIC_WS_URL}" < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
+
    +
  1. При запуске startup.prod.sh подменит в nginx.conf.template все переменные на их значения и создаст nginx.conf, который и будет использовать для запуска nginx
  2. +
+

Использование env из сгенерированного файла

+

Для использования переменных необходимо определить тип для window.__ENV__ в global.d.ts:

+
interface Window {
__ENV__: {
PUBLIC_API_URL: string;
PUBLIC_SENTRY_DSN: string;
PUBLIC_SENTRY_ENV: string;
PUBLIC_RELEASE_TAG: string;
};
}
+

В браузере доступ к env переменным осуществляется через window.__ENV__ в application слое приложения:

+
configService.init({
apiUrl: window.__ENV__.PUBLIC_API_URL,
monitoringDsn: window.__ENV__.PUBLIC_SENTRY_DSN,
monitoringStand: window.__ENV__.PUBLIC_SENTRY_ENV,
monitoringRelease: window.__ENV__.PUBLIC_RELEASE_TAG,
});
+

Преимущества inject env в index.html

+

Inject env позволяет:

+
    +
  • Получать env в браузере синхронно. Нет необходимости делать обработку асинхронного получения данных. Код приложения гарантированно получает все env на этапе выполнения
  • +
  • Снизить к 0 затраты на загрузку динамических env
  • +
+ + \ No newline at end of file diff --git a/docs/env/intro.html b/docs/env/intro.html new file mode 100644 index 0000000..038cdac Binary files /dev/null and b/docs/env/intro.html differ diff --git a/docs/env/safety.html b/docs/env/safety.html new file mode 100644 index 0000000..6efc93a --- /dev/null +++ b/docs/env/safety.html @@ -0,0 +1,28 @@ + + + + + +Безопасность. Использование PUBLIC и PRIVATE env | Astral.Frontend Guides + + + + +
Skip to main content

Безопасность. Использование PUBLIC и PRIVATE env

+

Для env переменных, которые должны быть доступны в браузере, необходимо указывать префикс PUBLIC_:

+
    +
  • PUBLIC_API_URL
  • +
  • PUBLIC_BRAND
  • +
+

Для env переменных, которые должны быть доступны только на стадии билда, необходимо указывать префикс PRIVATE_:

+
    +
  • PRIVATE_RELEASE_MANAGER_TOKEN
  • +
+

Мотивация

+

Если все env переменные сделать доступные в браузере, то злоумышленники могут найти уязвимости системы потому, что env хранит информацию о сервере, на котором запускает билд или само приложение.

+

Именно по этой причине Nextjs и Vite требуют для env переменных префиксы: NEXT_PUBLIC | NEXT_PRIVATE, VITE_.

+

CSR

+

Если приложение собирается через webpack, то достаточно просто следовать указанным ранее соглашениям по именованию.

+

Если приложение собирается через vite, то необходимо использовать envPrefix для кастомизации префикса.

+ + \ No newline at end of file diff --git a/docs/env/ssr.html b/docs/env/ssr.html new file mode 100644 index 0000000..72d34a5 --- /dev/null +++ b/docs/env/ssr.html @@ -0,0 +1,15 @@ + + + + + +Nextjs. SSR и SSG | Astral.Frontend Guides + + + + +
Skip to main content

Nextjs. SSR и SSG

+

Если на проекте используется Nextjs, то необходимо использовать тот механизм работы с env, который предоставляет фреймворк.

+

При SSR и SSG env нужны при билде.

+ + \ No newline at end of file diff --git a/docs/intro.html b/docs/intro.html index 7efdc60..6999412 100644 --- a/docs/intro.html +++ b/docs/intro.html @@ -4,11 +4,11 @@ Intro | Astral.Frontend Guides - - + + -
Skip to main content

Intro

+

Intro

Архитектура и стандартные фичи, описанные в документации, должны быть использованы при проектировании frontend в Астрал-Софт.

\ No newline at end of file diff --git a/docs/issues.html b/docs/issues.html index ca78597..99706a9 100644 --- a/docs/issues.html +++ b/docs/issues.html @@ -4,11 +4,11 @@ Issues | Astral.Frontend Guides - - + + -

Issues

-

Предложения по изменению документации или добавлению новых правил принимают либо на доске Frontend.Shared, либо через PR на Github.

+

Issues

+

Предложения по изменению документации или добавлению новых правил принимают либо на доске Frontend.Shared, либо через PR на Github.

\ No newline at end of file diff --git a/docs/permissions/2fa.html b/docs/permissions/2fa.html index 869d4c5..019299a 100644 Binary files a/docs/permissions/2fa.html and b/docs/permissions/2fa.html differ diff --git a/docs/permissions/core.html b/docs/permissions/core.html index 0ed6413..d1e27dc 100644 Binary files a/docs/permissions/core.html and b/docs/permissions/core.html differ diff --git a/docs/permissions/example.html b/docs/permissions/example.html index c036cef..302c11b 100644 Binary files a/docs/permissions/example.html and b/docs/permissions/example.html differ diff --git a/docs/permissions/featureToggle.html b/docs/permissions/featureToggle.html index 8717ae7..7b62810 100644 Binary files a/docs/permissions/featureToggle.html and b/docs/permissions/featureToggle.html differ diff --git a/docs/permissions/intro.html b/docs/permissions/intro.html index 2c16982..2d08eab 100644 Binary files a/docs/permissions/intro.html and b/docs/permissions/intro.html differ diff --git a/docs/permissions/permissionsFormation.html b/docs/permissions/permissionsFormation.html index c445184..bdbafef 100644 --- a/docs/permissions/permissionsFormation.html +++ b/docs/permissions/permissionsFormation.html @@ -4,11 +4,11 @@ Формирование доступов | Astral.Frontend Guides - - + + -

Формирование доступов

+

Формирование доступов

Permission - это доступ к функционалу, обусловленный бизнес требованиями.

Как выделять permission

Требование является permission, если:

@@ -27,7 +27,7 @@

export const Sidebar = observer(() => {
const [{ isAllowedBookCreation }] = useState(createUIStore);

return (
<Sidebar>
<SidebarItem>
{isAllowedBookCreation && (
<RouterLink to={APP_ROUTES.createBook.getRedirectPath()}>
Создать книгу
</RouterLink>
)}
</SidebarItem>
</Sidebar>
);
});

Permission не должен зависеть от UI

-

Permission не должен напрямую зависеть и указывать на UI, который блокируется. +

Permission не должен напрямую зависеть и указывать на UI, который блокируется. Зависимость от UI приведет к взрывному росту permissions и в последствии к сложной поддержке кода.

Пример

Кнопка "Создать документ" отображается только если пользователь является администратором - в данном требовании присутствует указать на конкретную кнопку.

@@ -71,7 +71,7 @@

Правильное решение

Создать абстрактный permission administrationActions, который будет закрывать доступ к действиям администратора:

class AdministrationPolicyStore {

...

public get administrationActions() {
return this.policyManager.createPermission((allow, deny) => {
if (this.userRepo.getRolesQuery().data?.isAdmin) {
return allow();
}

deny(PermissionDenialReason.NoAdmin);
});
}
}
-

Теперь на уровне features необходимо проверять administrationActions и на основе его выполнять необходимые действия.

+

Теперь на уровне features необходимо проверять administrationActions и на основе его выполнять необходимые действия.

Нейминг

Название permission должно отвечать на вопрос: "Доступ открыт/закрыт для чего/к чему?".

Примеры

@@ -84,7 +84,7 @@

Неймин
public get administrationActions() { ... }

public get addingToShelf() { ... }

public get readingBook() { ... }

public get organizationManagement() { ... }

❌ Invalid

public get canReadingBook() { ... }

public get isAddToShelf() { ... }
-

Нейминг методов для вычисления доступов

+

Нейминг методов для вычисления доступов

Для методов, которые вычисляют доступы, добавляется префикс calc.

✅ Valid

public calcReadingBook = (bookId: string) => { ... }
diff --git a/docs/permissions/permissionsModule.html b/docs/permissions/permissionsModule.html index 8cebfaf..45be7d9 100644 --- a/docs/permissions/permissionsModule.html +++ b/docs/permissions/permissionsModule.html @@ -4,11 +4,11 @@ Единый Permissions Module | Astral.Frontend Guides - - + + -

Единый Permissions Module

+

Единый Permissions Module

Вся логика, относящиеся к доступам, должна находится в модуле permissions:

├── modules/
| ├── permissions/
| | ├── stores/
| | | ├── PermissionsStore/
| | | | ├── policies/
| | | | ├── rules/
| | | | ├── PermissionsStore.ts
| | | | └── index.ts
| | | └── index.ts
| | ├── features/
| | | ├── routesGuards/
| | | | ├── AdminRouteGuard/
| | | | ├── ReadingBookRouteGuard/
| | | | └── index.ts
| | | └── index.ts
| | ├── types/
| | ├── enums.ts
| | └── index.ts
| ├── payment/
| └── layout/

Состав permissions модуля

@@ -23,7 +23,7 @@

Пример с нежелательным зацеплением

Требования

    -
  • Кнопка "Добавить документ" доступна только если есть подключенная организация
  • +
  • Кнопка "Добавить документ" доступна только если есть подключенная организация
  • Кнопка "Удалить организацию" доступна только если в рамках данной организации не было создано документов

Решение с зацеплением

-

Модуль docs реализует доступ docActions, который импортирует логику из модуля organization для проверки данных об организации. +

Модуль docs реализует доступ docActions, который импортирует логику из модуля organization для проверки данных об организации. Модуль organization реализует доступ deletingOrganization, который импортирует логику из модуля docs для проверки данных о документах.

Получаем циклическую зависимость и зацепление между модулями.

Решение без зацепления

diff --git a/docs/permissions/policies.html b/docs/permissions/policies.html index 273ec77..10d7c56 100644 --- a/docs/permissions/policies.html +++ b/docs/permissions/policies.html @@ -4,11 +4,11 @@ Policies. Политики доступов | Astral.Frontend Guides - - + + -

Policies. Политики доступов

+

Policies. Политики доступов

Policies группируют permissions и решают проблему роста количества permissions в приложении.

Местоположение

Все политики находятся в директории policies:

@@ -42,6 +42,6 @@

Переиспользование логики между policies

Policies не должны зависеть друг от друга и соответственно переиспользовать permissions потому.

Переиспользование permissions между policies приводит к пересечению бизнес требований и запутанной логике формирования доступов.

-

Если между policies необходимо переиспользовать логику, то надо использовать rules.

+

Если между policies необходимо переиспользовать логику, то надо использовать rules.

\ No newline at end of file diff --git a/docs/permissions/preparingData.html b/docs/permissions/preparingData.html index 3bc9bea..c3d545a 100644 --- a/docs/permissions/preparingData.html +++ b/docs/permissions/preparingData.html @@ -4,13 +4,13 @@ Подготовка данных для доступов | Astral.Frontend Guides - - + + -

Подготовка данных для доступов

+

Подготовка данных для доступов

Для формирования любых доступов нужны данные, получаемые из API.

-

Каждая policy указывает какие данные нужны для доступов

+

Каждая policy указывает какие данные нужны для доступов

Каждая policy определяет метод подготовки данных, которые нужны для формирования запросов.

Пример

В BooksPolicy для формирования доступа addingToShelf требуются данные из UserRepository и BillingRepository.

@@ -48,6 +48,6 @@

Обработка проблем получения данных

Если перед использованием permissions в features, не были успешно загружены данные, то permissions будут возвращать объект с конкретным reason:

type DenialMissingDataPermission = {
isAllowed: false;
reason: PermissionDenialReason.MissingData;
};
-

Reason PermissionDenialReason.MissingData можно будет при необходимости обработать централизованно или на месте использования permissions.

+

Reason PermissionDenialReason.MissingData можно будет при необходимости обработать централизованно или на месте использования permissions.

\ No newline at end of file diff --git a/docs/permissions/reasons.html b/docs/permissions/reasons.html index 5accdb3..6066f20 100644 Binary files a/docs/permissions/reasons.html and b/docs/permissions/reasons.html differ diff --git a/docs/permissions/routes.html b/docs/permissions/routes.html index cc58d69..cd7aa6c 100644 --- a/docs/permissions/routes.html +++ b/docs/permissions/routes.html @@ -4,16 +4,16 @@ Route Guards. Доступы к рутам приложения | Astral.Frontend Guides - - + + -

Route Guards. Доступы к рутам приложения

+

Route Guards. Доступы к рутам приложения

Route Guard - это react-компонент, позволяющий управлять доступом к руту приложения.

Местоположение

Все Route Guards хранятся в modules/permissions/features/routeGuards:

├── modules/
| ├── permissions/
| | ├── features/
| | | ├── routesGuards/
| | | | ├── AdminRouteGuard/
| | | | ├── ReadingBookRouteGuard/
| | | | └── index.ts
| | | └── index.ts
| | └── index.ts
-

Guard вызывается для каждой page

+

Guard вызывается для каждой page

Route Guard должен вызываться на каждой page, которая должна быть защищена доступами.

Мотивация Вызов Route Guard для каждого page позволяет достичь простоты поддержки. При исследовании pages сразу видна связь страницы и доступов.

@@ -42,7 +42,7 @@

Пример<

Страница создания книги (admin/createBook) должна быть доступна только администратору.

Реализация

В AdministrationPolicy уже реализован permissions - administrationActions, на основе которого можно делать вывод доступна ли пользователю страница создания книги.

-

На момент реализации, все вложенные руты в /admin подходят под administrationActions permission, поэтому реализуем единый для всех /admin/ Guard:

+

На момент реализации, все вложенные руты в /admin подходят под administrationActions permission, поэтому реализуем единый для всех /admin/ Guard:

modules/permissions/features/routeGuards/AdminRouteGuard

import type { ReactNode } from 'react';
import { observer } from 'mobx-react-lite';

import { PageLayout, Placeholder } from '@example/shared';

import { PermissionDenialReason, permissionsStore } from '../../../domain';
import { PermissionGuard } from '../../PermissionGuard';

type Props = {
children: ReactNode;
};

export const AdminRouteGuard = observer(({ children }: Props) => {
return (
<PermissionGuard
permission={permissionsStore.administration.administrationActions}
denialSwitch={{
[PermissionDenialReason.NoAdmin]: (
<PageLayout
header={{ title: 'Панель администратора' }}
content={{
children: (
<Placeholder title="Доступно только для администраторов" />
),
}}
/>
),
}}
>
{children}
</PermissionGuard>
);
});

denialSwitch позволяет обработать причины отказа. В данном случае, если причина отказа 'no-admin', то необходимо показать соответствующий Placeholder.

diff --git a/docs/permissions/rules.html b/docs/permissions/rules.html index 2f7a3f3..0ca2101 100644 --- a/docs/permissions/rules.html +++ b/docs/permissions/rules.html @@ -4,15 +4,15 @@ Rules. Переиспользование логики доступов | Astral.Frontend Guides - - + + -

Rules. Переиспользование логики доступов

+

Rules. Переиспользование логики доступов

Rule - это атомарное правило, позволяющее реализовать часть требований для формирования permissions.

Цель: возможность переиспользования логики формирования permissions между policies.

Местоположение

-

Все правила находятся в директории rules:

+

Все правила находятся в директории rules:

├── modules/
| ├── permissions/
| | ├── stores/
| | | ├── PermissionsStore/
| | | | ├── policies/
| | | | ├── rules/
| | | | | |── calcAcceptableAge/
| | | | | |── calcAccountPayment/
| | | | | └── index.ts
| | | ├── PermissionsStore.ts
| | | └── index.ts
| | ├── enums.ts
| | └── index.ts

Rules - приватные функции модуля permissions

Rules недоступны вне permissions модуля и являются частью имплементации PermissionsStore.

@@ -21,11 +21,11 @@

Пример

Требования

    -
  • Чтение книги доступно только если возраст пользователя соответствует доступному возрасту, указанному в книге
  • +
  • Чтение книги доступно только если возраст пользователя соответствует доступному возрасту, указанному в книге
  • Покупка товара доступна только если возраст пользователя соответствует доступному возрасту, указанному в товаре

Решение

-

Требуется реализовать два permissions: calcReadingBook и calcPayment. +

Требуется реализовать два permissions: calcReadingBook и calcPayment. Оба permissions должны реализовать одну и ту же логику проверки возраста пользователя. Необходимо реализовать rule: calcAcceptableAge:

modules/permissions/domain/stores/PermissionsStore/rules/calcAcceptableAge

@@ -34,7 +34,7 @@

Примерmodules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore

import { calcAcceptableAge } from '../../rules';

export class PaymentPolicyStore {
private readonly policy: PermissionsPolicy;

constructor(
policyManager: PermissionsPolicyManagerStore,
private readonly userRepo: UserRepository,
) {
makeAutoObservable(this, {}, { autoBind: true });

this.policy = policyManager.createPolicy({
name: 'payment',
prepareData: async () => {
await Promise.all([userRepo.getPersonInfoQuery().async()]);
},
});
}

/**
* Возможность оплатить товар
*/
public calcPayment = (acceptableAge: number) =>
this.policy.createPermission((allow, deny) => {
const agePermission = calcAcceptableAge(
acceptableAge,
this.userRepo.getPersonInfoQuery().data?.birthday,
);

if (!agePermission.isAllowed) {
return deny(agePermission.reason);
}

allow();
});
}

modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicyStore

-
import { calcAcceptableAge } from '../../rules';

export class BooksPolicyStore {
private readonly policy: PermissionsPolicy;

constructor(
policyManager: PermissionsPolicyManagerStore,
private readonly billingRepo: BillingRepository,
private readonly userRepo: UserRepository,
) {
makeAutoObservable(this, {}, { autoBind: true });

this.policy = policyManager.createPolicy({
name: 'books',
prepareData: async () => {
await Promise.all([
this.userRepo.getRolesQuery().async(),
this.userRepo.getPersonInfoQuery().async(),
this.billingRepo.getBillingInfoQuery().async(),
]);
},
});
}

/**
* Возможность прочитать книгу онлайн
*/
public calcReadingOnline = (acceptableAge?: number) => {
return this.policy.createPermission((allow, deny) => {
const agePermission = calcAcceptableAge(
acceptableAge,
this.userRepo.getPersonInfoQuery().data?.birthday,
);

if (!agePermission.isAllowed) {
return deny(agePermission.reason);
}

const billingInfo = this.billingRepo.getBillingInfoQuery().data;

if (!billingInfo?.paid) {
return deny(PermissionDenialReason.NoPayAccount);
}

allow();
});
};
}
+
import { calcAcceptableAge } from '../../rules';

export class BooksPolicyStore {
private readonly policy: PermissionsPolicy;

constructor(
policyManager: PermissionsPolicyManagerStore,
private readonly billingRepo: BillingRepository,
private readonly userRepo: UserRepository,
) {
makeAutoObservable(this, {}, { autoBind: true });

this.policy = policyManager.createPolicy({
name: 'books',
prepareData: async () => {
await Promise.all([
this.userRepo.getRolesQuery().async(),
this.userRepo.getPersonInfoQuery().async(),
this.billingRepo.getBillingInfoQuery().async(),
]);
},
});
}

/**
* Возможность прочитать книгу онлайн
*/
public calcReadingOnline = (acceptableAge?: number) => {
return this.policy.createPermission((allow, deny) => {
const agePermission = calcAcceptableAge(
acceptableAge,
this.userRepo.getPersonInfoQuery().data?.birthday,
);

if (!agePermission.isAllowed) {
return deny(agePermission.reason);
}

const billingInfo = this.billingRepo.getBillingInfoQuery().data;

if (!billingInfo?.paid) {
return deny(PermissionDenialReason.NoPayAccount);
}

allow();
});
};
}

Нейминг

Все rules имеют префикс calc.

✅ Valid

diff --git a/docs/permissions/testing.html b/docs/permissions/testing.html index 095d2b7..5d9bcdf 100644 Binary files a/docs/permissions/testing.html and b/docs/permissions/testing.html differ diff --git a/index.html b/index.html index b7bcf6d..1f15199 100644 --- a/index.html +++ b/index.html @@ -4,8 +4,8 @@ Hello from Astral.Frontend Guides | Astral.Frontend Guides - - + +

Astral.Frontend Guides

Стандарты проектирования frontend Астрал-Софт

diff --git a/lunr-index-1717664714026.json b/lunr-index-1717664714026.json deleted file mode 100644 index fc4683c..0000000 --- a/lunr-index-1717664714026.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,925.985]],["content/0",[0,10.056,1,10.056,2,10.056,3,9.072,4,8.338,5,11.549,6,9.072,7,9.072,8,12.084,9,11.549,10,11.549,11,11.549,12,11.549]],["keywords/0",[]],["title/1",[13,835.424]],["content/1",[3,9.253,13,9.253,14,11.778,15,10.256,16,9.253,17,10.256,18,5.458,19,5.978,20,11.778,21,11.778,22,11.778,23,11.778]],["keywords/1",[]],["title/2",[24,754.464,25,506.374,26,754.464]],["content/2",[]],["keywords/2",[]],["title/3",[25,392.366,27,459.239,28,584.599,29,422.056,30,459.239]],["content/3",[19,4.339,25,8.679,27,6.716,30,9.004,31,8.55,32,8.55,33,7.444,34,7.444,35,8.55,36,8.55,37,11.462,38,11.462,39,11.462,40,7.444,41,8.55,42,6.172,43,6.172,44,2.042,45,8.55,46,6.172,47,8.55,48,8.55,49,8.55,50,8.55,51,8.55,52,8.55,53,8.55,54,6.716,55,6.172,56,7.693,57,8.55,58,6.172,59,11.462,60,6.716,61,7.444,62,2.256,63,8.55,64,6.716,65,6.716]],["keywords/3",[]],["title/4",[29,544.691,30,592.678,66,237.38]],["content/4",[19,3.865,25,5.111,44,1.8,58,7.647,62,2.795,67,5.983,68,5.983,69,6.631,70,9.504,71,7.616,72,5.498,73,4.331,74,6.277,75,5.111,76,5.111,77,3.114,78,5.844,79,5.983,80,4.272,81,3.865,82,8.173,83,6.631,84,5.983,85,5.498,86,7.616,87,7.616,88,7.616,89,7.616,90,7.616,91,6.277,92,4.272,93,7.647,94,6.631,95,7.616,96,3.381,97,4.908,98,7.616,99,7.616,100,6.631,101,6.631,102,3.114,103,0.838,104,5.983,105,5.498,106,5.111,107,7.616,108,7.616,109,5.111,110,4.789,111,5.983]],["keywords/4",[]],["title/5",[25,506.374,29,544.691,66,237.38]],["content/5",[29,6.55,44,1.341,54,7.128,58,6.55,67,7.128,68,7.128,69,7.9,72,6.55,73,3.711,74,7.067,75,6.09,76,6.09,77,3.711,78,5.293,79,7.128,80,6.689,83,7.9,91,5.377,92,5.09,93,6.55,96,4.028,103,0.998,104,10.462,106,8.003,112,9.073,113,9.073,114,9.073,115,6.09,116,9.367,117,9.073,118,9.073,119,7.9,120,5.377,121,9.073,122,7.9]],["keywords/5",[]],["title/6",[66,237.38,123,423.253,124,506.374]],["content/6",[]],["keywords/6",[]],["title/7",[103,97.12,125,495.197]],["content/7",[126,7.257,127,7.257,128,12.936]],["keywords/7",[]],["title/8",[129,334.604]],["content/8",[126,7.257,127,7.257,130,12.936]],["keywords/8",[]],["title/9",[131,596.607]],["content/9",[126,7.257,127,7.257,132,12.936]],["keywords/9",[]],["title/10",[133,452.859]],["content/10",[126,7.257,127,7.257,134,12.936]],["keywords/10",[]],["title/11",[102,360.984,133,375.883]],["content/11",[126,7.257,127,7.257,135,12.936]],["keywords/11",[]],["title/12",[102,308.539,103,83.01,136,423.253]],["content/12",[126,7.257,127,7.257,137,12.936]],["keywords/12",[]],["title/13",[138,495.197,139,249.767]],["content/13",[126,7.257,127,7.257,140,12.936]],["keywords/13",[]],["title/14",[141,495.197,142,447.991]],["content/14",[126,7.257,127,7.257,143,12.936]],["keywords/14",[]],["title/15",[102,308.539,141,423.253,142,382.905]],["content/15",[144,9.238,145,12.796,146,12.796,147,9.238]],["keywords/15",[]],["title/16",[103,83.01,148,365.535,149,506.374]],["content/16",[]],["keywords/16",[]],["title/17",[19,334.332,103,72.48,148,319.165,149,442.139]],["content/17",[19,6.882,103,1.61,148,7.09,149,10.227,150,9.79,151,8.732,152,11.116,153,5.151,154,8.732]],["keywords/17",[]],["title/18",[13,835.424]],["content/18",[]],["keywords/18",[]],["title/19",[62,232.899,155,882.706]],["content/19",[8,7.9,27,9.367,43,8.608,44,2.091,62,2.394,70,8.608,73,3.711,77,3.711,109,6.09,124,8.003,151,9.367,156,5.706,157,6.09,158,7.9,159,9.073,160,13.318,161,7.9,162,9.073,163,9.073,164,9.073,165,9.073,166,6.55,167,9.073,168,9.367,169,9.073,170,6.09,171,9.073,172,9.073,173,7.128,174,7.9,175,5.09]],["keywords/19",[]],["title/20",[124,506.374,176,754.464,177,382.905]],["content/20",[43,9.735,44,1.627,97,6.248,120,6.527,123,7.564,178,11.012,179,11.012,180,11.012,181,11.012,182,11.012,183,11.012,184,11.012,185,11.012,186,6.527,187,9.589,188,7.95]],["keywords/20",[]],["title/21",[124,592.447,151,693.42]],["content/21",[44,2.037,78,4.326,97,4.516,122,8.485,139,2.757,177,4.946,189,9.745,190,8.485,191,9.745,192,5.318,193,9.745,194,5.107,195,5.107,196,9.745,197,9.745,198,8.485,199,9.745,200,9.745,201,7.655,202,5.775,203,9.745,204,8.485,205,9.745,206,6.54,207,9.745,208,7.035,209,8.485,210,9.745]],["keywords/21",[]],["title/22",[211,754.464,212,544.691,213,321.274]],["content/22",[3,9.44,66,3.781,124,8.066,139,3.4,156,7.558,212,8.676,213,5.117,214,10.464,215,8.676,216,8.066]],["keywords/22",[]],["title/23",[116,517.495,217,658.758,218,658.758,219,658.758]],["content/23",[]],["keywords/23",[]],["title/24",[66,334.604]],["content/24",[44,1.053,62,1.182,73,1.832,77,2.913,78,1.988,80,2.513,92,2.513,96,1.988,103,0.784,110,2.817,111,5.595,116,7.938,123,2.513,129,2.241,136,2.513,148,2.17,156,2.817,194,1.832,209,3.9,220,2.654,221,4.725,222,4.479,223,3.233,224,2.594,225,3.162,226,2.513,227,4.184,228,5.923,229,5.923,230,3.615,231,2.17,232,2.386,233,2.17,234,2.17,235,8.867,236,7.122,237,3.3,238,3.451,239,3.3,240,2.513,241,3.233,242,2.386,243,2.654,244,2.17,245,2.386,246,3.233,247,2.79,248,2.386,249,3.233,250,3.033,251,2.654,252,4.277,253,2.654,254,2.273,255,4.479,256,4.479,257,2.817,258,3.518,259,3.233,260,4.479,261,4.479,262,4.479,263,2.654,264,2.273,265,3.233,266,3.9,267,1.988,268,3.233,269,3.233,270,7.122,271,4.479,272,1.832,273,4.479,274,3.9,275,4.479,276,4.479,277,6.402,278,4.479,279,3.9,280,3.006,281,4.479,282,2.817,283,3.233,284,4.479]],["keywords/24",[]],["title/25",[103,83.01,120,447.152,125,423.253]],["content/25",[]],["keywords/25",[]],["title/26",[103,83.01,285,754.464,286,349.614]],["content/26",[77,4.865,96,5.281,97,6.546,192,5.066,195,4.865,206,7.985,287,11.897,288,11.897,289,11.897,290,9.346]],["keywords/26",[]],["title/27",[44,77.655,96,233.255,186,311.42,194,214.883,286,243.489,291,525.448]],["content/27",[6,6.021,18,4.93,19,5.4,44,2.218,60,6.021,62,2.022,65,6.021,96,4.723,97,3.552,100,6.674,138,4.3,139,3.01,150,5.534,157,7.141,177,3.89,186,4.543,188,5.534,192,3.264,194,3.135,195,4.351,201,6.021,202,4.543,286,6.426,292,7.665,293,7.665,294,7.665,295,6.674,296,7.665,297,9.264,298,9.599,299,7.665,300,7.665,301,7.665,302,7.665,303,7.665,304,6.674,305,6.674,306,9.264,307,6.674,308,6.674,309,7.665,310,7.665,311,7.665,312,7.665,313,7.665]],["keywords/27",[]],["title/28",[66,237.38,297,656.925,298,592.678]],["content/28",[44,1.825,73,3.197,74,4.633,76,5.246,77,4.41,81,3.967,82,7.238,91,6.392,93,7.786,96,5.481,103,0.86,104,8.472,111,8.472,139,3.494,201,6.14,286,6.987,298,9.699,314,6.806,315,7.817,316,7.817,317,7.817,318,7.817,319,6.806,320,13.312,321,9.39,322,10.784,323,13.312,324,10.784,325,7.817,326,6.806,327,5.643,328,7.817,329,7.817]],["keywords/28",[]],["title/29",[44,97.357,131,369.562,194,269.4,195,269.4]],["content/29",[]],["keywords/29",[]],["title/30",[66,277.729,102,360.984]],["content/30",[1,2.608,4,2.163,18,1.388,19,1.52,62,1.348,73,1.225,74,1.775,77,1.225,78,2.967,80,2.867,91,1.775,92,4.431,103,0.33,115,2.011,119,2.608,129,1.608,136,1.681,153,1.388,175,1.681,208,2.163,213,2.176,224,2.877,225,2.269,227,4.185,228,4.474,229,4.474,230,2.594,231,1.451,232,2.723,233,1.451,234,1.451,237,2.368,238,2.476,239,3.097,240,1.681,242,1.596,244,1.451,245,1.596,247,3.807,248,1.596,250,3.776,252,3.956,253,1.775,254,1.52,263,1.775,264,2.594,267,3.507,268,2.163,269,3.69,272,3.23,277,3.69,280,2.011,282,6.484,283,2.163,286,1.388,314,2.608,330,5.233,331,2.996,332,5.25,333,2.996,334,2.996,335,2.353,336,2.996,337,2.996,338,2.996,339,2.353,340,2.996,341,4.015,342,2.996,343,2.996,344,3.029,345,2.368,346,1.775,347,1.775,348,2.176,349,1.775,350,2.011,351,1.884,352,1.884,353,1.884,354,1.596,355,2.163,356,2.163,357,2.163,358,1.681,359,1.884,360,2.163,361,2.353,362,2.163,363,2.163,364,2.353,365,2.353,366,2.353,367,2.608,368,2.608,369,2.996,370,2.996,371,1.884,372,2.163,373,4.45,374,3.43,375,3.69,376,3.561,377,4.45,378,2.608,379,2.608,380,2.996,381,2.353,382,2.996,383,2.608,384,2.996,385,2.353,386,2.353,387,1.681,388,2.608,389,4.45,390,4.45,391,2.996,392,1.884,393,2.996,394,2.996,395,1.596,396,4.015,397,4.015,398,2.996,399,2.163,400,2.996,401,2.996,402,2.996,403,2.996,404,2.996,405,2.996,406,2.996,407,2.996,408,2.996,409,2.996,410,2.996,411,2.996,412,2.996]],["keywords/30",[]],["title/31",[131,369.562,186,390.43,413,517.495,414,475.595]],["content/31",[18,2.445,44,1.633,58,5.845,60,6.36,62,2.136,78,2.342,80,2.96,103,0.581,115,3.541,129,1.66,131,6.197,139,2.291,144,5.845,157,3.541,186,4.798,187,4.594,188,3.809,192,3.447,194,4.028,195,3.311,212,3.809,213,3.447,221,2.811,224,3.587,227,4.205,286,2.445,306,4.594,327,3.809,345,2.445,348,2.247,371,3.318,413,4.145,414,7.975,415,5.276,416,4.145,417,4.594,418,5.276,419,3.809,420,5.276,421,5.276,422,4.798,423,8.096,424,4.594,425,5.276,426,5.276,427,5.276,428,5.276,429,9.85,430,7.049,431,7.049,432,8.096,433,5.276,434,5.276,435,8.096,436,8.096,437,5.276,438,5.276,439,5.276,440,5.276,441,5.276,442,5.276,443,5.276,444,5.276]],["keywords/31",[]],["title/32",[445,1063.473]],["content/32",[18,5.249,131,7.696,139,3.205,153,5.249,376,6.036,446,7.124,447,11.328,448,11.328,449,8.899,450,11.328,451,11.328,452,11.328,453,11.328,454,11.328,455,11.328]],["keywords/32",[]],["title/33",[44,111.501,129,237.38,456,474.477]],["content/33",[]],["keywords/33",[]],["title/34",[457,835.424]],["content/34",[103,0.783,105,5.135,109,4.774,125,3.99,129,3.692,226,3.99,227,4.312,267,3.157,349,4.216,422,4.216,456,4.473,458,8.79,459,6.193,460,6.193,461,5.135,462,8.473,463,6.193,464,6.193,465,6.193,466,6.193,467,5.135]],["keywords/34",[]],["title/35",[220,523.158,456,555.127]],["content/35",[]],["keywords/35",[]],["title/36",[43,422.056,64,459.239,65,459.239,286,270.899,456,367.65]],["content/36",[18,4.337,34,10.595,66,2.945,67,10.622,68,7.353,81,6.176,103,1.339,105,6.757,125,6.827,129,3.829,161,8.15,243,5.547,251,5.547,286,5.639,319,8.15,354,4.987,467,9.762,468,12.169,469,12.169,470,9.36,471,8.15,472,12.169,473,9.36,474,8.15,475,8.15]],["keywords/36",[]],["title/37",[66,207.267,102,269.4,213,280.519,220,390.43]],["content/37",[44,0.992,62,1.77,81,3.406,103,0.738,129,3.574,138,3.764,139,1.899,153,3.109,192,2.857,213,4.123,223,4.844,224,2.444,225,2.979,226,3.764,227,4.155,228,5.264,229,5.264,230,3.406,231,3.251,232,5.16,233,3.251,234,4.691,237,3.109,238,3.251,239,3.109,240,3.764,241,4.844,242,3.575,243,3.977,244,3.251,245,3.575,246,4.844,247,2.111,248,3.575,249,4.844,307,5.843,344,3.977,345,3.109,346,3.977,347,3.977,348,5.297,353,4.22,371,4.22,395,3.575,414,4.844,416,5.271,456,4.22,476,5.271,477,4.504,478,5.271,479,6.71,480,3.977,481,5.843]],["keywords/37",[]],["title/38",[44,86.397,120,346.478,267,259.513,456,367.65,482,509.021]],["content/38",[44,1.566,62,1.763,66,2.102,97,3.895,102,1.691,103,0.455,120,2.451,123,3.748,129,2.645,136,2.32,138,2.32,139,2.379,157,2.775,166,2.985,177,2.099,188,2.985,192,3.58,195,1.691,198,3.6,213,3.58,224,3.061,225,2.966,226,3.748,227,4.163,228,1.916,229,4.473,231,3.237,232,3.56,233,4.073,234,4.677,237,3.096,238,3.237,239,3.096,243,2.451,244,2.003,247,1.301,250,4.512,252,2.433,267,4.703,272,1.691,286,1.916,327,2.985,344,2.451,345,1.916,346,2.451,347,2.451,348,5.078,349,3.96,351,2.6,352,6.07,354,2.203,358,2.32,368,3.6,392,2.6,395,4.479,461,2.985,466,3.6,476,3.248,477,2.775,478,5.248,482,3.6,483,6.681,484,4.135,485,4.135,486,4.135,487,5.248,488,5.817,489,5.817,490,4.135,491,3.6,492,3.6,493,3.248,494,7.319,495,3.6,496,3.6,497,3.6,498,3.6,499,3.6,500,3.6,501,3.6,502,3.6,503,3.6,504,3.248,505,4.135,506,4.135,507,4.135,508,4.135]],["keywords/38",[]],["title/39",[96,334.918,129,237.38,509,592.678]],["content/39",[18,4.834,19,5.294,44,1.542,55,7.531,62,2.752,72,7.531,73,4.266,96,5.788,103,1.435,129,4.475,133,4.442,192,4.442,208,9.413,305,11.353,509,8.194,510,10.431,511,10.431,512,10.431,513,10.431]],["keywords/39",[]],["title/40",[44,130.454,192,375.883]],["content/40",[]],["keywords/40",[]],["title/41",[103,97.12,514,882.706]],["content/41",[2,10.488,44,1.362,46,6.652,70,8.696,72,6.652,73,5.488,78,4.09,80,5.169,82,6.184,97,4.27,103,1.325,139,3.408,148,4.464,149,6.184,153,4.27,168,7.238,173,9.462,279,8.023,290,7.238,321,8.023,345,4.27,358,5.169,422,7.139,515,9.214,516,6.652,517,9.214,518,7.238,519,9.214,520,9.214,521,9.214,522,9.214,523,9.214]],["keywords/41",[]],["title/42",[66,277.729,73,360.984]],["content/42",[4,5.327,44,1.531,70,5.327,73,4.237,74,8.105,75,8.036,76,8.714,77,4.237,78,6.465,79,5.796,80,5.812,82,6.953,92,4.139,103,1.505,139,3.674,148,3.575,149,4.952,175,4.139,221,3.932,335,8.139,518,8.139,524,11.973,525,10.36,526,7.379,527,7.379,528,11.973,529,10.36,530,7.379,531,6.425,532,7.379,533,7.379,534,7.379,535,7.379,536,7.379,537,7.379,538,7.379,539,7.379]],["keywords/42",[]],["title/43",[103,72.48,213,280.519,220,390.43,540,573.592]],["content/43",[44,1.573,81,3.044,103,0.66,105,4.33,110,3.771,129,3.709,153,2.779,194,2.453,202,3.554,213,3.798,221,3.196,223,4.33,224,2.184,225,2.662,226,3.364,227,4.189,228,4.933,229,4.933,230,3.044,231,2.906,232,4.752,233,2.906,234,4.321,237,2.779,238,2.906,239,2.779,240,3.364,241,4.33,242,3.196,243,3.554,244,2.906,245,3.196,246,4.33,247,2.806,248,3.196,249,4.33,250,2.554,251,3.554,252,3.248,253,3.554,254,3.044,263,3.554,264,3.044,265,4.33,344,3.554,345,2.779,346,3.554,347,3.554,348,5.02,371,3.771,395,3.196,414,4.33,476,4.711,477,4.025,478,4.711,480,3.554,541,5.222,542,5.997,543,5.997,544,5.997]],["keywords/43",[]],["title/44",[54,693.42,103,97.12]],["content/44",[44,1.44,103,1.072,131,7.006,194,5.107,195,5.107,227,4.075,247,3.066,376,6.655,395,5.192,449,7.655,545,9.745,546,8.485,547,8.485,548,8.485,549,10.874,550,9.745,551,9.745,552,9.745,553,9.745,554,8.485]],["keywords/44",[]],["title/45",[66,207.267,102,269.4,103,72.48,123,369.562]],["content/45",[16,3.428,44,1.471,56,2.928,62,1.151,73,1.784,74,2.586,75,2.928,78,1.937,81,3.54,91,2.586,96,1.937,102,1.784,103,0.48,110,2.744,136,3.913,148,2.114,221,3.717,223,3.15,224,3.174,225,3.097,226,2.448,227,4.18,228,3.233,229,4.039,230,2.214,231,2.114,232,2.325,233,2.114,234,2.114,237,3.233,238,3.38,239,3.233,241,3.15,242,2.325,243,2.586,244,2.114,245,2.325,246,3.15,247,3.425,248,2.325,249,3.15,250,2.97,251,2.586,252,3.965,254,2.214,263,2.586,264,3.54,265,3.15,266,3.799,267,3.097,272,3.564,330,3.54,348,2.97,372,3.15,399,6.292,422,2.586,449,3.428,477,2.928,501,3.799,502,7.588,503,3.799,555,4.363,556,8.715,557,3.799,558,3.799,559,4.363,560,6.074,561,3.428,562,6.074,563,3.799,564,3.799,565,6.976,566,4.363,567,3.799,568,6.976,569,6.976,570,6.976,571,6.976,572,4.363,573,4.363,574,4.363,575,3.799,576,4.363,577,4.363,578,4.363,579,3.428,580,4.363,581,4.363,582,4.363,583,4.363,584,4.363]],["keywords/45",[]],["title/46",[55,475.595,56,442.139,103,72.48,153,305.264]],["content/46",[46,8.101,55,8.101,56,9.154,64,8.815,94,9.77,103,1.501,153,5.2,215,8.101,326,9.77,345,5.2,419,8.101,585,8.815,586,9.77,587,11.221,588,11.221]],["keywords/46",[]],["title/47",[66,334.604]],["content/47",[44,1.497,56,3.706,62,2.212,66,1.737,73,2.258,74,4.968,75,3.706,76,3.706,78,2.451,81,4.254,84,4.338,91,4.968,101,4.808,103,1.115,106,3.706,110,5.271,139,1.562,148,2.675,170,3.706,202,3.273,221,4.466,225,3.721,226,4.702,227,4.134,247,3.559,250,4.816,251,6.004,252,4.991,254,5.74,263,6.704,264,5.74,265,8.166,280,3.706,295,4.808,419,3.987,422,3.273,516,3.987,557,4.808,558,9.848,561,4.338,579,4.338,586,4.808,589,5.522,590,4.338,591,5.522,592,8.382,593,5.522,594,5.522,595,5.522,596,5.522,597,5.522,598,5.522,599,5.522,600,5.522]],["keywords/47",[]],["title/48",[601,835.424]],["content/48",[44,1.203,66,2.561,82,5.462,103,0.895,110,5.118,158,7.086,221,4.337,227,4.192,250,6.225,251,4.824,330,4.13,359,5.118,471,7.086,474,7.086,602,7.086,603,8.139,604,8.139,605,8.139,606,8.139,607,8.139,608,9.906,609,8.139,610,7.086,611,7.086,612,8.139,613,11.087,614,6.393,615,6.393,616,8.139,617,8.139]],["keywords/48",[]],["title/49",[44,97.357,85,475.595,480,390.43,601,517.495]],["content/49",[44,1.502,227,4.136,247,4.036,250,5.462,304,8.849,375,9.261,376,6.835,480,6.023,614,7.983,615,7.983,618,10.162,619,8.849,620,8.849,621,8.849,622,10.162]],["keywords/49",[]],["title/50",[44,97.357,96,292.433,133,280.519,509,517.495]],["content/50",[]],["keywords/50",[]],["title/51",[457,835.424]],["content/51",[6,5.907,103,0.827,125,4.218,129,2.366,133,4.47,227,4.321,267,3.338,458,6.547,459,6.547,460,6.547,462,8.732,463,6.547,464,6.547,623,5.047,624,7.519]],["keywords/51",[]],["title/52",[103,64.321,133,248.94,286,270.899,625,584.599,626,584.599]],["content/52",[103,1.336,109,8.148,133,5.17,267,5.389,286,5.626,422,7.195,465,10.571,627,9.537,628,12.14]],["keywords/52",[]],["title/53",[123,495.197,133,375.883]],["content/53",[81,6.357,133,5.334,212,9.043,213,5.334,541,10.906,629,10.906]],["keywords/53",[]],["title/54",[66,334.604]],["content/54",[18,1.549,33,2.91,44,0.494,62,1.479,73,1.367,77,3.467,78,3.215,85,2.413,91,1.981,93,2.413,96,1.484,103,0.617,129,1.764,133,3.084,156,4.554,175,1.875,186,1.981,213,2.387,216,2.243,224,2.637,225,2.489,227,4.179,228,4.377,229,4.377,230,2.845,231,2.716,233,2.716,234,2.716,237,2.598,238,2.716,239,2.598,240,3.145,242,2.987,244,2.716,245,2.987,247,3.586,248,2.987,250,2.387,252,3.956,253,3.323,254,3.675,264,3.675,272,3.467,330,2.845,344,1.981,345,1.549,346,1.981,347,1.981,348,3.084,349,3.323,350,3.763,351,2.102,352,2.102,353,3.526,354,1.781,355,2.413,356,2.413,357,2.413,358,3.145,360,2.413,362,2.413,363,2.413,376,1.781,392,2.102,461,4.047,554,2.91,590,4.404,610,2.91,611,2.91,621,2.91,623,7.291,629,2.91,630,7.421,631,3.526,632,3.342,633,6.306,634,2.91,635,4.881,636,3.342,637,7.843,638,5.689,639,4.404,640,2.91,641,2.91,642,2.91,643,3.342,644,2.91,645,2.91,646,2.91,647,2.91,648,3.342,649,4.881,650,2.91,651,2.91,652,4.881,653,4.881,654,4.881,655,4.881,656,3.342,657,2.91,658,3.342,659,3.342]],["keywords/54",[]],["title/55",[601,835.424]],["content/55",[40,9.885,44,1.246,77,3.447,133,3.589,227,4.154,247,4.322,272,5.617,376,7.87,614,6.621,615,6.621,619,7.338,620,7.338,623,5.657,630,6.621,637,8.196,639,8.918,660,8.428,661,11.353,662,8.428,663,8.428,664,8.428,665,8.428]],["keywords/55",[]],["title/56",[44,111.501,138,423.253,139,213.481]],["content/56",[]],["keywords/56",[]],["title/57",[42,379.351,44,77.655,46,379.351,129,165.324,139,148.679,666,525.448]],["content/57",[42,8.856,129,3.859,138,6.881,139,3.471,192,5.223,259,8.856,480,7.27,667,12.266]],["keywords/57",[]],["title/58",[66,334.604]],["content/58",[44,0.828,62,1.478,92,3.142,129,3.584,139,2.397,153,2.595,192,2.385,208,4.043,213,3.607,220,3.319,224,2.039,225,2.486,227,4.172,228,4.735,229,4.735,230,2.842,231,4.104,232,4.514,233,2.713,234,4.104,237,2.595,238,2.713,239,2.595,240,3.142,242,2.984,244,4.104,245,2.984,247,3.215,248,2.984,250,2.385,252,4.149,253,3.319,254,2.842,258,4.399,263,3.319,264,4.3,272,2.29,282,3.522,330,2.842,344,3.319,345,2.595,346,3.319,347,3.319,348,2.385,349,3.319,350,3.759,351,3.522,352,5.328,353,3.522,354,2.984,355,4.043,356,4.043,357,4.043,358,3.142,359,5.328,360,4.043,361,4.399,362,4.043,363,4.043,364,4.399,365,4.399,366,4.399,475,4.876,540,4.876,590,4.399,634,4.876,657,4.876,668,5.6,669,5.6]],["keywords/58",[]],["title/59",[129,207.267,139,186.4,493,517.495,670,517.495]],["content/59",[16,3.572,18,3.341,44,1.642,62,1.2,97,4.15,102,3.663,103,0.5,120,4.273,129,3.207,138,6.234,139,3.745,153,2.107,154,3.572,177,2.308,192,3.07,204,7.799,213,3.814,216,3.052,224,1.656,225,2.019,226,2.551,227,4.024,228,2.107,229,4.15,231,3.493,232,5.431,233,4.339,234,2.203,237,2.107,238,2.203,239,2.107,243,2.695,244,4.339,247,1.431,250,4.34,252,1.656,259,3.283,267,3.2,327,3.283,344,2.695,345,2.107,346,2.695,347,2.695,348,3.07,349,2.695,351,2.86,352,2.86,354,2.423,395,2.423,417,3.959,446,7.435,480,7.007,487,5.663,488,3.959,489,3.959,491,3.959,492,6.277,493,3.572,494,7.799,495,3.959,496,3.959,497,3.959,498,3.959,499,3.959,500,3.959,504,3.572,585,3.572,602,3.959,671,4.547,672,4.547,673,3.959,674,4.547,675,4.547,676,3.572,677,4.547,678,3.959,679,4.547,680,4.547,681,3.959,682,4.273,683,4.547,684,4.547,685,3.959,686,3.959,687,3.959]],["keywords/59",[]],["title/60",[102,434.909]],["content/60",[62,2.147,97,5.138,103,0.895,139,2.303,224,2.964,227,4.015,247,4.26,252,2.964,272,5.157,399,5.876,575,7.086,670,9.906,682,4.824,688,7.086,689,8.139,690,8.139,691,8.139,692,8.139,693,8.139,694,8.139,695,8.139,696,8.139,697,8.139,698,8.139,699,8.139,700,8.139,701,8.139,702,8.139,703,8.139,704,8.139,705,8.139,706,8.139,707,8.139,708,8.139,709,8.139,710,8.139,711,7.086,712,5.876,713,8.139]],["keywords/60",[]],["title/61",[670,693.42,681,768.588]],["content/61",[7,3.056,18,1.803,19,4.092,42,2.809,62,1.678,97,4.315,102,1.591,103,0.887,109,2.611,115,2.611,129,1.224,133,1.657,136,2.183,138,2.183,139,2.904,150,2.809,166,2.809,175,2.183,192,1.657,224,2.315,225,2.823,227,4.172,228,5.387,229,5.105,230,3.227,231,1.885,233,1.885,234,1.885,237,2.946,238,3.081,239,3.736,240,2.183,242,2.073,244,3.081,245,2.073,247,3.466,248,2.073,250,4.371,252,3.391,253,2.306,254,1.975,259,5.821,264,1.975,267,2.823,268,2.809,269,2.809,272,2.6,277,2.809,283,2.809,290,3.056,330,1.975,348,1.657,350,2.611,353,2.447,358,2.183,367,3.388,373,3.388,374,4.267,375,4.59,376,2.073,386,3.056,387,2.183,388,3.388,389,5.536,390,3.388,422,2.306,461,2.809,480,3.768,585,3.056,623,4.267,633,3.388,635,3.388,637,4.59,638,3.056,649,3.388,650,3.388,651,3.388,652,3.388,653,3.388,654,3.388,655,3.388,682,2.306,685,3.388,686,3.388,687,5.536,711,3.388,714,3.891,715,3.891,716,3.388,717,3.891,718,3.891,719,3.891,720,3.891,721,3.891,722,3.891,723,3.891,724,3.891,725,3.891,726,3.891,727,3.891,728,3.891,729,3.891,730,3.891,731,3.891,732,3.891,733,3.891,734,3.891]],["keywords/61",[]],["title/62",[139,186.4,166,475.595,735,573.592,736,658.758]],["content/62",[62,2.681,102,5.246,103,1.546,131,7.885,139,2.876,148,4.924,157,6.821,202,6.023,227,3.581,257,6.391,374,6.821,395,5.415,546,8.849,547,8.849,548,8.849,712,7.337,737,10.162,738,10.162,739,12.827,740,10.162]],["keywords/62",[]],["title/63",[44,86.397,97,270.899,141,327.959,142,296.696,206,392.366]],["content/63",[]],["keywords/63",[]],["title/64",[457,835.424]],["content/64",[103,0.976,125,4.976,141,4.976,142,4.501,148,4.297,227,4.301,413,6.968,462,9.508,741,7.723,742,7.723,743,6.968,744,7.723]],["keywords/64",[]],["title/65",[142,334.332,147,475.595,446,414.288,682,390.43]],["content/65",[18,4.303,44,1.789,61,8.086,77,3.798,84,7.295,102,3.798,103,1.022,141,6.792,142,6.144,147,9.725,153,4.303,173,7.295,177,4.713,206,6.233,215,8.74,286,4.303,345,4.303,387,5.21,446,7.614,682,5.504,716,8.086,745,9.287,746,9.287,747,9.287,748,12.106,749,9.287,750,9.287,751,9.287,752,9.287,753,9.287,754,9.287]],["keywords/65",[]],["title/66",[66,334.604]],["content/66",[62,1.333,103,0.556,125,2.834,144,3.647,147,5.652,148,2.447,224,2.851,227,4.292,247,3.675,252,3.49,272,3.92,348,4.974,354,2.692,372,5.652,397,6.149,462,6.92,608,3.968,688,4.398,742,4.398,743,6.149,744,6.816,755,5.051,756,5.051,757,5.051,758,4.398,759,4.398,760,6.816,761,6.816,762,4.398,763,4.398,764,4.398,765,6.816,766,5.051,767,5.051,768,5.051,769,7.828,770,3.968,771,7.828,772,5.051,773,5.051,774,5.051,775,5.051,776,5.051,777,5.051,778,5.051,779,5.051]],["keywords/66",[]],["title/67",[387,495.197,780,693.42]],["content/67",[7,8.267,62,2.777,81,5.341,102,4.304,139,2.978,141,7.355,142,6.654,214,9.163,215,7.597,358,5.904,387,7.355,446,8.245,518,8.267,608,8.267,682,6.237,780,10.299,781,10.523,782,10.523,783,10.523]],["keywords/67",[]],["title/68",[141,423.253,142,382.905,220,447.152]],["content/68",[15,8.699,62,2.636,73,4.086,81,6.44,123,7.119,141,7.823,142,7.077,170,6.706,177,5.071,194,4.086,195,4.086,202,5.921,257,6.283,387,7.119,516,7.213,531,8.699,561,7.849,741,8.699,784,9.991,785,11.049,786,9.991,787,9.991]],["keywords/68",[]],["title/69",[66,334.604]],["content/69",[18,2.227,62,1.268,73,1.965,77,3.079,78,2.133,97,2.227,103,0.828,120,2.848,123,4.224,139,1.36,142,2.439,144,6.703,150,3.469,156,3.022,170,3.225,177,2.439,194,3.079,195,3.079,206,3.225,220,4.463,221,4.012,224,2.742,227,4.13,247,3.808,251,4.463,252,2.742,257,3.022,267,2.133,272,3.079,330,3.821,348,5.388,371,3.022,372,3.469,387,5.208,395,4.012,396,5.915,399,5.436,467,3.469,477,3.225,481,4.184,516,3.469,563,6.556,564,4.184,567,4.184,631,3.022,678,4.184,743,5.915,758,4.184,759,4.184,760,4.184,761,6.556,762,4.184,763,4.184,764,4.184,765,4.184,770,3.775,780,3.775,788,4.806,789,4.184,790,4.806,791,4.806,792,4.806,793,4.806,794,6.556,795,4.806,796,6.556,797,4.184,798,6.556,799,9.15,800,4.806,801,6.556,802,4.806,803,4.806,804,4.806,805,4.806,806,4.806,807,4.806,808,4.184,809,4.806,810,4.806,811,4.806,812,4.806,813,4.806]],["keywords/69",[]],["title/70",[44,86.397,194,239.073,195,239.073,735,509.021,814,459.239]],["content/70",[194,5.177,195,5.177,257,7.961,785,11.023,814,9.945]],["keywords/70",[]],["title/71",[66,334.604]],["content/71",[44,1.364,103,1.327,170,4.217,175,3.525,177,3.189,194,3.775,195,3.775,202,3.724,224,2.288,227,4.184,247,3.794,252,4.678,272,2.57,274,5.471,348,4.659,371,3.951,395,4.918,396,7.251,562,5.471,770,4.936,794,5.471,796,5.471,797,8.037,798,5.471,799,10.5,801,8.037,808,9.527,814,4.936,815,6.283,816,6.283,817,6.283,818,5.471,819,9.23,820,9.23,821,4.536,822,9.23,823,6.283,824,6.283,825,5.471,826,5.471,827,5.471,828,6.283,829,6.283,830,6.283]],["keywords/71",[]],["title/72",[44,111.501,831,754.464,832,506.374]],["content/72",[]],["keywords/72",[]],["title/73",[129,207.267,833,658.758,834,658.758,835,475.595]],["content/73",[4,3.446,17,1.695,44,0.518,62,1.774,66,0.613,77,1.432,80,4.573,92,1.092,103,0.525,106,1.307,115,5.472,129,1.502,131,1.965,153,2.212,154,1.53,168,1.53,174,1.695,177,0.988,186,1.154,190,1.695,192,0.829,195,0.796,221,2.543,224,0.709,225,0.864,227,4.202,228,2.212,229,2.212,230,0.988,231,2.312,232,1.866,233,0.943,234,0.943,237,0.902,238,0.943,239,2.702,240,1.092,242,1.038,244,2.825,245,5.578,247,4.192,248,3.991,250,2.032,252,3.933,253,2.829,254,3.801,257,1.225,258,1.53,263,2.829,264,4.922,272,4.416,282,5.127,308,1.695,330,4.137,332,6.404,341,4.58,345,1.623,349,2.076,350,1.307,351,1.225,352,1.225,353,1.225,354,1.038,355,1.406,356,1.406,357,1.406,358,1.092,359,3.001,360,5.886,361,3.749,362,3.446,363,3.446,364,3.749,365,3.749,366,3.749,374,3.203,385,1.53,392,1.225,416,1.53,419,1.406,446,2.203,487,1.53,504,1.53,549,1.695,579,1.53,627,4.58,631,2.203,673,1.695,676,3.749,682,1.154,818,1.695,821,2.528,832,1.307,835,7.294,836,1.947,837,1.947,838,1.947,839,3.749,840,1.695,841,1.695,842,7.937,843,5.855,844,1.695,845,3.502,846,5.83,847,6.521,848,5.855,849,8.152,850,4.773,851,5.83,852,1.947,853,1.947,854,1.947,855,1.947,856,1.947,857,1.947,858,1.947,859,3.502,860,1.947,861,1.947,862,1.947,863,3.502,864,1.947,865,1.947,866,1.947,867,1.947,868,1.947,869,1.947,870,1.947,871,3.502,872,1.947,873,1.947,874,3.502,875,1.947,876,1.947,877,1.947,878,1.947,879,1.947,880,1.947,881,1.947,882,1.947]],["keywords/73",[]],["title/74",[133,375.883,832,592.447]],["content/74",[44,0.869,62,1.551,77,3.593,78,4.67,103,0.647,106,3.945,133,2.503,139,1.663,195,2.404,224,2.141,227,4.159,247,4.395,252,3.831,254,4.459,264,4.459,272,3.593,335,4.618,376,3.132,392,3.697,623,5.897,630,9.17,631,5.525,637,7.595,638,4.618,639,6.902,640,5.118,641,5.118,642,5.118,644,5.118,645,5.118,646,5.118,647,5.118,676,4.618,825,5.118,826,5.118,827,7.65,832,5.897,835,6.343,840,5.118,841,5.118,842,4.618,883,5.878,884,5.878,885,10.52,886,5.878,887,5.878,888,5.878,889,5.878,890,5.878,891,5.878,892,10.52,893,5.878,894,5.878,895,5.878]],["keywords/74",[]],["title/75",[103,72.48,136,369.562,216,442.139,832,442.139]],["content/75",[44,1.549,62,1.069,66,1.274,85,4.743,92,2.272,96,1.798,103,0.723,125,2.272,136,4.65,156,2.547,175,3.686,192,1.725,194,2.687,195,1.656,216,2.718,224,1.475,225,1.798,227,4.161,228,3.044,229,3.044,230,2.055,237,1.877,239,1.877,247,4.005,250,4.061,252,3.018,267,1.798,268,2.924,269,2.924,277,4.743,280,4.409,282,5.997,283,2.924,330,5.32,332,6.511,339,8.818,341,6.511,359,2.547,374,4.409,375,4.743,376,2.158,377,3.526,378,3.526,379,3.526,381,6.511,383,3.526,385,3.182,386,3.182,387,2.272,430,5.72,431,9.774,467,2.924,560,3.526,631,4.132,712,4.743,821,2.924,835,7.568,839,3.182,842,8.235,843,5.72,844,3.526,896,4.05,897,6.57,898,4.05,899,4.05,900,8.288,901,5.72,902,4.05,903,5.72,904,6.57,905,6.57,906,4.05,907,6.57,908,4.05,909,6.57,910,4.05,911,3.526,912,7.217,913,3.526]],["keywords/75",[]],["title/76",[103,97.12,914,882.706]],["content/76",[19,2.726,44,0.794,62,1.417,77,2.197,103,0.591,175,3.014,194,3.357,213,3.495,227,4.195,247,3.78,252,1.956,267,2.385,272,5.388,280,3.605,282,5.162,330,4.166,339,4.22,348,3.495,354,4.373,359,7.013,381,6.448,392,3.378,397,4.22,424,4.677,627,4.22,631,3.378,712,3.878,789,7.147,821,3.878,839,4.22,847,8.673,848,4.677,901,4.677,903,4.677,911,4.677,912,4.677,913,4.677,915,5.372,916,8.208,917,5.372,918,8.208,919,8.208,920,8.208,921,9.96,922,8.208,923,12.012,924,11.151,925,5.372,926,5.372,927,5.372,928,8.208,929,8.208,930,5.372,931,5.372]],["keywords/76",[]]],"invertedIndex":[["",{"_index":227,"title":{},"content":{"24":{"position":[[218,1],[399,1],[401,1],[428,3],[432,1],[449,3],[465,1],[544,3],[574,1],[636,2],[639,3],[643,1],[645,3],[649,1],[685,2],[723,1],[781,1],[783,2],[882,2],[992,1],[1037,1],[1088,1],[1106,1],[1146,3],[1150,1],[1152,1],[1229,1],[1403,1],[1405,1],[1432,3],[1436,1],[1453,3],[1457,1],[1482,1],[1484,2],[1493,1],[1512,1],[1595,1],[1663,1],[1723,1],[1784,2],[1795,1],[1853,1],[1855,2],[1964,2],[1975,1],[2068,2],[2071,2],[2074,1]]},"30":{"position":[[547,2],[632,1],[661,1],[721,1],[907,1],[909,1],[936,3],[940,1],[957,3],[973,1],[1038,2],[1047,1],[1156,3],[1160,2],[1163,3],[1167,1],[1169,3],[1173,1],[1211,2],[1241,1],[1299,1],[1350,1],[1368,1],[1388,1],[1460,1],[1512,1],[1517,1],[1597,1],[1599,1],[1655,1],[1666,3],[1670,1],[1672,1],[1717,2],[1811,1],[1873,1],[1933,1],[1959,1],[2102,1],[2104,1],[2131,3],[2135,1],[2152,3],[2156,1],[2176,1],[2178,2],[2187,1],[2241,1],[2319,1],[2403,1],[2440,1],[2445,1],[2537,1],[2539,1],[2619,2],[2630,1],[2727,2],[2730,2],[2755,1],[2757,2],[2766,1],[2790,1],[2798,2],[2824,1],[2826,2],[2835,1],[2859,1],[2868,2],[2871,1],[2900,1],[3031,1],[3033,1],[3047,2],[3072,1],[3089,2],[3105,1],[3113,2],[3162,2],[3165,1],[3212,1],[3435,2],[3438,3]]},"31":{"position":[[319,1],[321,3],[325,1],[355,1],[357,3],[369,1],[383,3],[387,1],[408,1],[410,3],[427,1],[447,1],[604,1],[606,3],[610,1],[649,1],[651,3],[669,1],[689,3],[693,1],[740,1],[742,3],[758,1],[776,1],[894,1],[915,1],[981,1],[983,3],[987,1],[1026,1],[1028,3],[1046,1],[1082,3],[1086,1],[1133,1],[1135,3],[1151,1],[1185,3],[1189,1],[1224,1],[1226,3],[1238,1],[1252,1]]},"34":{"position":[[48,3],[61,1],[63,3],[80,1],[82,1],[84,3],[96,1],[98,1],[100,1],[102,3],[124,1],[126,1],[128,1],[130,1],[132,3],[146,1],[148,1],[150,1],[152,1],[154,1],[156,3],[187,1],[189,1],[191,1],[193,1],[195,1],[197,3],[219,1],[221,1],[223,1],[225,1],[227,1],[229,3],[253,1],[255,1],[257,1],[259,1],[261,1],[263,3],[276,1],[278,1],[280,1],[282,3],[306,1],[308,1],[310,1],[312,3],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3]]},"37":{"position":[[95,1],[116,1],[143,1],[160,1],[191,1],[216,1],[244,2],[329,1],[358,1],[427,1],[570,1],[572,1],[599,3],[603,1],[620,3],[624,2],[736,1],[796,2],[905,3],[935,1],[997,2],[1000,3],[1004,1],[1006,1]]},"38":{"position":[[203,1],[224,1],[246,1],[282,1],[318,1],[354,1],[378,2],[470,1],[491,1],[528,1],[555,1],[592,1],[677,1],[710,1],[777,1],[798,3],[802,1],[836,2],[869,1],[1093,1],[1120,3],[1124,1],[1141,3],[1145,2],[1263,1],[1313,1],[1378,2],[1392,1],[1461,2],[1464,1],[1466,3],[1470,1],[1520,2],[1542,1],[1544,2],[1624,1],[1673,1],[1675,1],[1677,2],[1720,1],[1779,2],[1828,1],[1890,1],[1917,3],[1921,1],[1938,3],[1942,1],[1979,1],[2053,1],[2055,1]]},"43":{"position":[[181,1],[202,1],[229,1],[246,1],[277,1],[302,1],[330,2],[415,1],[444,1],[513,1],[656,1],[658,1],[685,3],[689,1],[706,3],[722,1],[801,3],[831,1],[893,2],[896,3],[900,1],[902,3],[906,1],[942,2],[980,1],[1038,1],[1089,1],[1091,2],[1127,1],[1129,2],[1209,3],[1213,1],[1215,1]]},"44":{"position":[[59,1],[61,1],[83,3],[87,1],[114,2],[134,3],[138,1],[192,2],[238,2]]},"45":{"position":[[249,1],[359,1],[361,1],[388,3],[392,1],[409,3],[490,3],[520,1],[582,2],[585,3],[589,1],[591,3],[595,1],[631,2],[669,1],[734,1],[785,1],[803,1],[843,3],[847,1],[849,1],[947,1],[958,1],[991,1],[1010,1],[1070,1],[1090,1],[1099,1],[1313,1],[1338,2],[1341,3],[1607,1],[1669,1],[1696,3],[1700,1],[1717,3],[1721,1],[1758,1],[1832,1],[1834,1],[1915,1],[1935,1],[1943,2],[1968,2],[1971,1],[2005,1],[2077,1],[2177,2],[2218,2],[2221,3]]},"47":{"position":[[264,1],[266,3],[305,1],[370,1],[421,1],[439,1],[479,3],[483,1],[523,1],[588,1],[639,1],[657,1],[697,3],[701,1],[736,1],[801,1],[852,1],[870,1],[910,3],[914,1],[916,1],[1248,1],[1250,3],[1289,1],[1354,1],[1405,1],[1423,1],[1463,3],[1467,1],[1469,1]]},"48":{"position":[[288,1],[332,1],[334,3],[338,1],[367,1],[369,3],[373,1],[400,1],[402,3],[406,1],[444,1],[446,3],[450,1],[454,1],[493,1],[495,3],[499,1],[527,1],[529,3],[533,1]]},"49":{"position":[[68,1],[100,1],[125,1],[127,3],[131,1],[135,1],[170,1],[195,1],[197,3],[201,1]]},"51":{"position":[[44,3],[57,1],[59,3],[76,1],[78,1],[80,3],[92,1],[94,1],[96,1],[98,3],[120,1],[122,1],[124,1],[126,1],[128,3],[142,1],[144,1],[146,1],[148,1],[150,3],[161,1],[163,1],[165,1],[167,1],[169,1],[171,3],[194,1],[196,1],[198,1],[200,1],[202,1],[204,3],[228,1],[230,1],[232,1],[234,1],[236,1],[238,3],[251,1],[253,1],[255,1],[257,3],[281,1],[283,1],[285,1],[287,3],[300,1],[302,1],[304,3],[317,1],[319,1],[321,3]]},"54":{"position":[[525,2],[612,1],[625,1],[686,1],[688,1],[737,1],[776,1],[798,1],[849,1],[870,1],[924,1],[1002,1],[1055,1],[1066,3],[1258,1],[1278,1],[1332,1],[1480,1],[1482,1],[1509,3],[1513,1],[1530,3],[1546,1],[1613,2],[1622,1],[1684,2],[1687,3],[1691,1],[1693,3],[1697,1],[1726,2],[1748,1],[1829,1],[1851,1],[1938,2],[1971,1],[2008,1],[2019,3],[2023,1],[2112,1],[2132,1],[2184,1],[2381,1],[2383,1],[2410,3],[2414,1],[2431,3],[2447,1],[2512,2],[2521,1],[2674,3],[2678,2],[2681,3],[2685,1],[2687,3],[2691,1],[2728,2],[2756,1],[2789,1],[2847,1],[2869,1],[2956,2],[2989,1],[3026,1],[3046,1],[3117,1],[3169,1],[3180,3],[3184,2],[3187,1]]},"55":{"position":[[32,1],[41,3],[45,1],[75,2],[105,1],[128,6],[135,3],[139,1],[172,2],[199,1],[255,6],[264,1],[296,1],[319,6],[351,1],[407,6]]},"58":{"position":[[176,2],[261,1],[290,1],[350,1],[536,1],[538,1],[565,3],[569,1],[586,3],[602,1],[648,2],[751,2],[760,1],[913,3],[917,2],[920,3],[924,1],[926,3],[930,1],[968,2],[998,1],[1056,1],[1107,1],[1125,1],[1145,1],[1217,1],[1269,1],[1274,1],[1354,1],[1356,1],[1412,1],[1423,3],[1427,1],[1429,1]]},"59":{"position":[[102,2],[194,1],[215,1],[252,1],[279,1],[309,3],[313,1],[347,2],[380,1],[604,1],[631,3],[635,1],[652,3],[656,2],[774,1],[824,1],[889,2],[903,1],[972,2],[975,1],[977,3],[981,1],[1031,2],[1053,1],[1055,2],[1135,1],[1184,1],[1186,1]]},"60":{"position":[[121,1],[141,1],[162,1],[207,1],[266,1],[352,2],[355,4],[367,1],[621,2],[726,2],[729,3]]},"61":{"position":[[543,1],[563,1],[617,1],[765,1],[767,1],[794,3],[798,1],[815,3],[831,1],[898,2],[907,1],[969,2],[972,3],[976,1],[978,3],[982,1],[1011,2],[1033,1],[1114,1],[1136,1],[1223,2],[1256,1],[1293,1],[1304,3],[1308,1],[1489,1],[1515,1],[1702,1],[1704,1],[1731,3],[1735,1],[1752,3],[1756,1],[1786,1],[1841,1],[1854,1],[1856,2],[1865,1],[1887,1],[1982,1],[2048,1],[2116,1],[2173,1],[2259,2],[2262,2],[2287,1],[2289,2],[2298,1],[2322,1],[2330,2],[2356,1],[2358,2],[2367,1],[2391,1],[2400,2],[2403,1]]},"62":{"position":[[179,1],[181,1],[245,2]]},"64":{"position":[[72,3],[85,1],[87,3],[104,1],[106,1],[108,3],[122,1],[124,1],[126,1],[128,3],[146,1],[148,1],[150,1],[152,1],[154,3],[175,1],[177,1],[179,1],[181,1],[183,3],[210,1],[212,1],[214,1],[216,1],[218,3],[231,1],[233,1],[235,1],[237,3],[250,1],[252,1],[254,3]]},"66":{"position":[[58,3],[75,1],[77,3],[88,1],[90,1],[92,3],[103,1],[105,1],[107,1],[109,3],[128,1],[130,1],[132,3],[142,1],[144,1],[146,1],[148,3],[164,3],[177,1],[179,3],[196,1],[198,1],[200,3],[214,1],[216,1],[218,1],[220,3],[238,1],[240,1],[242,1],[244,1],[246,3],[267,1],[269,1],[271,1],[273,1],[275,3],[302,1],[304,1],[306,1],[308,1],[310,3],[323,1],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3],[408,1],[429,1],[463,1],[481,1],[541,1],[543,2],[552,1],[561,1],[641,2],[644,2],[723,1],[759,1],[793,1],[811,1],[844,1],[868,1],[929,1],[931,2],[940,1],[948,1],[953,1],[955,1],[985,1],[1055,1],[1064,1],[1171,2],[1174,2]]},"69":{"position":[[494,1],[506,1],[529,1],[540,1],[573,1],[599,1],[632,1],[675,1],[708,1],[726,1],[769,1],[771,1],[794,2],[826,1],[849,2],[865,1],[874,1],[1013,1],[1071,2],[1095,1],[1173,2],[1176,2],[1185,2],[1188,2],[1232,2],[1235,3],[1482,1],[1503,1],[1537,1],[1555,1],[1615,1],[1617,2],[1626,1],[1635,1],[1715,2],[1718,2]]},"71":{"position":[[8,1],[22,1],[60,1],[73,1],[103,1],[128,1],[162,1],[164,1],[190,3],[194,1],[268,2],[339,2],[342,3],[346,1],[415,2],[447,1],[449,2],[488,2],[504,1],[532,1],[551,1],[590,1],[632,1],[656,3],[697,1],[775,1],[799,3],[842,1],[932,1],[994,2]]},"73":{"position":[[47,1],[233,1],[235,1],[262,3],[266,1],[283,3],[299,1],[364,2],[373,1],[482,3],[486,2],[489,3],[493,1],[495,3],[499,1],[537,2],[567,1],[625,1],[676,1],[694,1],[714,1],[786,1],[838,1],[843,1],[923,1],[925,1],[981,1],[992,3],[996,1],[998,1],[1176,2],[1185,1],[1225,2],[1234,4],[1239,3],[1433,1],[1491,1],[1493,2],[1580,1],[1598,1],[1618,1],[1666,2],[1740,1],[1792,1],[1794,2],[1860,1],[1940,1],[1942,1],[1998,1],[2000,2],[2107,3],[2111,1],[2169,2],[2178,1],[2218,2],[2227,1],[2265,2],[2274,1],[2282,1],[2288,1],[2290,1],[2320,3],[2374,3],[2426,2],[2435,4],[2501,2],[2510,4],[2590,2],[2599,4],[2700,2],[2709,4],[2714,3],[2718,3],[2908,2],[2917,1],[2931,1],[2939,2],[2964,2],[2967,1],[3050,2],[3059,1],[3081,1],[3130,1],[3173,1],[3219,2],[3270,2],[3279,2],[3291,4],[3296,3],[3322,1],[3377,2],[3430,2],[3492,2],[3495,3],[3509,1],[3579,2],[3629,1],[3635,2],[3638,2],[3679,2],[3688,1],[3726,2],[3735,1],[3743,1],[3749,1],[3751,1],[3781,3],[3835,3],[3839,3],[3843,3],[4170,2],[4179,1],[4187,1],[4193,1],[4195,1],[4240,1],[4254,2],[4257,3],[4386,2],[4389,3],[4495,1],[4553,1],[4604,1],[4622,1],[4642,1],[4714,1],[4766,1],[4771,1],[4851,1],[4853,1],[4909,1],[4911,2],[4961,3],[4965,1],[5155,2],[5164,1],[5172,1],[5178,1],[5180,1],[5225,1],[5296,1],[5331,2],[5334,3],[5338,2],[5341,3],[5395,3]]},"74":{"position":[[254,1],[256,1],[305,1],[344,1],[366,1],[417,1],[438,1],[492,1],[497,1],[580,1],[582,1],[635,1],[646,3],[682,2],[691,1],[717,2],[726,1],[771,2],[780,1],[799,1],[932,3],[989,2],[998,4],[1064,2],[1073,4],[1078,3],[1129,1],[1196,2],[1205,4],[1210,3]]},"75":{"position":[[265,1],[295,1],[405,1],[407,1],[435,1],[455,1],[480,1],[482,2],[621,1],[694,1],[696,2],[795,1],[882,1],[884,1],[886,1],[923,1],[925,2],[1030,1],[1123,1],[1125,1],[1127,1],[1207,2],[1218,1],[1220,2],[1428,2],[1431,2],[1460,1],[1462,2],[1471,1],[1499,1],[1507,2],[1537,1],[1539,2],[1548,1],[1576,1],[1585,2],[1588,1],[1644,2],[1653,1],[1693,2],[1702,1],[1783,2],[1792,4],[1885,2],[1894,4],[1993,2],[2002,4],[2112,2],[2121,4],[2126,3],[2130,3]]},"76":{"position":[[150,1],[161,1],[199,1],[249,1],[306,2],[315,1],[355,2],[364,1],[378,1],[427,1],[446,1],[480,1],[558,1],[576,2],[579,2],[661,2],[670,1],[672,2],[754,1],[798,1],[842,2],[845,3],[855,1],[868,1],[870,1],[972,3],[1064,2],[1073,1],[1075,2],[1183,1],[1227,1],[1305,2],[1308,2],[1311,3],[1321,1],[1327,1],[1329,1],[1407,3],[1411,3],[1415,3]]}},"keywords":{}}],["1",{"_index":880,"title":{},"content":{"73":{"position":[[5312,2]]}},"keywords":{}}],["2",{"_index":882,"title":{},"content":{"73":{"position":[[5329,1]]}},"keywords":{}}],["20.05.2024",{"_index":529,"title":{},"content":{"42":{"position":[[555,10],[764,10]]}},"keywords":{}}],["2fa",{"_index":116,"title":{"23":{"position":[[0,3]]}},"content":{"5":{"position":[[301,3],[483,4]]},"24":{"position":[[74,4],[967,3],[1914,3],[1958,5]]}},"keywords":{}}],["abac",{"_index":25,"title":{"2":{"position":[[12,4]]},"3":{"position":[[17,5]]},"5":{"position":[[9,4]]}},"content":{"3":{"position":[[64,4],[303,5],[506,5]]},"4":{"position":[[620,4]]}},"keywords":{}}],["acceptableag",{"_index":637,"title":{},"content":{"54":{"position":[[690,15],[781,16],[987,14],[1750,15],[1872,14],[2758,16],[2890,14]]},"55":{"position":[[201,15],[353,15]]},"61":{"position":[[1035,15],[1157,14]]},"74":{"position":[[258,15],[349,16],[566,13]]}},"keywords":{}}],["access",{"_index":38,"title":{},"content":{"3":{"position":[[86,6],[121,6]]}},"keywords":{}}],["account",{"_index":426,"title":{},"content":{"31":{"position":[[437,9]]}},"keywords":{}}],["addingtoshelf",{"_index":359,"title":{},"content":{"30":{"position":[[1225,15]]},"48":{"position":[[351,15]]},"58":{"position":[[40,13],[982,15]]},"73":{"position":[[551,15],[1417,15],[4479,15]]},"75":{"position":[[96,13]]},"76":{"position":[[703,13],[800,14],[1106,13],[1229,14]]}},"keywords":{}}],["addtoshelf",{"_index":377,"title":{},"content":{"30":{"position":[[2165,10],[3116,11]]},"75":{"position":[[444,10]]}},"keywords":{}}],["admin",{"_index":144,"title":{},"content":{"15":{"position":[[1,5]]},"31":{"position":[[375,7],[1244,7]]},"66":{"position":[[96,6]]},"69":{"position":[[320,6],[408,7],[1332,7]]}},"keywords":{}}],["admin/createbook",{"_index":788,"title":{},"content":{"69":{"position":[[37,18]]}},"keywords":{}}],["admin/createbookbook/read",{"_index":755,"title":{},"content":{"66":{"position":[[28,28]]}},"keywords":{}}],["administr",{"_index":243,"title":{},"content":{"24":{"position":[[507,17]]},"36":{"position":[[277,15]]},"37":{"position":[[778,17]]},"38":{"position":[[939,15]]},"43":{"position":[[764,17]]},"45":{"position":[[453,17]]},"59":{"position":[[450,15]]}},"keywords":{}}],["administrationact",{"_index":251,"title":{},"content":{"24":{"position":[[699,23]]},"36":{"position":[[222,21]]},"43":{"position":[[956,23]]},"45":{"position":[[645,23]]},"47":{"position":[[1133,22],[1265,23],[1520,21]]},"48":{"position":[[308,23]]},"69":{"position":[[165,22],[340,21]]}},"keywords":{}}],["administrationactionsдоступ",{"_index":609,"title":{},"content":{"48":{"position":[[152,27]]}},"keywords":{}}],["administrationpolici",{"_index":481,"title":{},"content":{"37":{"position":[[865,20]]},"69":{"position":[[115,20]]}},"keywords":{}}],["administrationpolicypermiss",{"_index":473,"title":{},"content":{"36":{"position":[[311,30]]}},"keywords":{}}],["administrationpolicystor",{"_index":226,"title":{},"content":{"24":{"position":[[192,25]]},"34":{"position":[[160,26]]},"37":{"position":[[401,25]]},"38":{"position":[[712,26],[955,26]]},"43":{"position":[[487,25]]},"45":{"position":[[223,25]]},"47":{"position":[[238,25],[1222,25]]},"59":{"position":[[466,26]]}},"keywords":{}}],["adminrouteguard",{"_index":743,"title":{},"content":{"64":{"position":[[158,16]]},"66":{"position":[[250,16],[465,15]]},"69":{"position":[[810,15],[1539,15]]}},"keywords":{}}],["agepermiss",{"_index":652,"title":{},"content":{"54":{"position":[[1837,13],[2855,13]]},"61":{"position":[[1122,13]]}},"keywords":{}}],["agepermission.isallow",{"_index":654,"title":{},"content":{"54":{"position":[[1944,26],[2962,26]]},"61":{"position":[[1229,26]]}},"keywords":{}}],["allow",{"_index":264,"title":{},"content":{"24":{"position":[[1097,8]]},"30":{"position":[[1359,8],[1657,8]]},"43":{"position":[[1118,8]]},"45":{"position":[[794,8],[1207,7]]},"47":{"position":[[430,8],[648,8],[861,8],[1414,8]]},"54":{"position":[[1057,8],[2010,8],[3171,8]]},"58":{"position":[[1116,8],[1414,8]]},"61":{"position":[[1295,8]]},"73":{"position":[[685,8],[983,8],[1384,5],[1589,8],[2098,8],[4411,5],[4613,8],[4919,5],[4952,8],[4985,5]]},"74":{"position":[[180,5],[637,8]]}},"keywords":{}}],["allowadministrationrout",{"_index":593,"title":{},"content":{"47":{"position":[[496,26]]}},"keywords":{}}],["allowedcount",{"_index":881,"title":{},"content":{"73":{"position":[[5315,13]]}},"keywords":{}}],["amp;&",{"_index":583,"title":{},"content":{"45":{"position":[[2066,10]]}},"keywords":{}}],["api",{"_index":54,"title":{"44":{"position":[[0,3]]}},"content":{"3":{"position":[[339,3]]},"5":{"position":[[40,3]]}},"keywords":{}}],["apiна",{"_index":167,"title":{},"content":{"19":{"position":[[268,5]]}},"keywords":{}}],["app",{"_index":690,"title":{},"content":{"60":{"position":[[117,3]]}},"keywords":{}}],["applic",{"_index":688,"title":{},"content":{"60":{"position":[[52,11]]},"66":{"position":[[62,12]]}},"keywords":{}}],["application/app.tsx",{"_index":689,"title":{},"content":{"60":{"position":[[82,19]]}},"keywords":{}}],["application/pages/admin/createbook.tsx",{"_index":758,"title":{},"content":{"66":{"position":[[361,38]]},"69":{"position":[[1435,38]]}},"keywords":{}}],["application/pages/book/reading.tsx",{"_index":766,"title":{},"content":{"66":{"position":[[680,34]]}},"keywords":{}}],["astral/permiss",{"_index":213,"title":{"22":{"position":[[14,20]]},"37":{"position":[[33,20]]},"43":{"position":[[33,20]]}},"content":{"22":{"position":[[59,20]]},"30":{"position":[[550,19],[668,22]]},"31":{"position":[[457,19],[922,22]]},"37":{"position":[[247,19],[365,22]]},"38":{"position":[[397,19],[498,22],[562,22]]},"43":{"position":[[333,19],[451,22]]},"53":{"position":[[48,20]]},"54":{"position":[[528,19],[632,22]]},"58":{"position":[[179,19],[297,22]]},"59":{"position":[[121,19],[222,22],[286,22]]},"76":{"position":[[121,20],[256,22]]}},"keywords":{}}],["astral/vit",{"_index":127,"title":{},"content":{"7":{"position":[[27,11]]},"8":{"position":[[27,11]]},"9":{"position":[[27,11]]},"10":{"position":[[27,11]]},"11":{"position":[[27,11]]},"12":{"position":[[27,11]]},"13":{"position":[[27,11]]},"14":{"position":[[27,11]]}},"keywords":{}}],["async",{"_index":245,"title":{},"content":{"24":{"position":[[538,5]]},"30":{"position":[[1032,5]]},"37":{"position":[[899,5]]},"43":{"position":[[795,5]]},"45":{"position":[[484,5]]},"54":{"position":[[1607,5],[2506,5]]},"58":{"position":[[745,5]]},"61":{"position":[[892,5]]},"73":{"position":[[358,5],[2259,5],[2420,5],[2495,5],[2584,5],[2694,5],[2933,5],[3264,5],[3424,5],[3720,5],[4164,5],[5149,5]]}},"keywords":{}}],["attribut",{"_index":36,"title":{},"content":{"3":{"position":[[69,10]]}},"keywords":{}}],["auth",{"_index":219,"title":{"23":{"position":[[16,5]]}},"content":{},"keywords":{}}],["authstore.addprotectedhttpclients([apihttpcli",{"_index":696,"title":{},"content":{"60":{"position":[[300,51]]}},"keywords":{}}],["autobind",{"_index":238,"title":{},"content":{"24":{"position":[[434,9],[1438,9]]},"30":{"position":[[942,9],[2137,9]]},"37":{"position":[[605,9]]},"38":{"position":[[1126,9],[1923,9]]},"43":{"position":[[691,9]]},"45":{"position":[[394,9],[1702,9]]},"54":{"position":[[1515,9],[2416,9]]},"58":{"position":[[571,9]]},"59":{"position":[[637,9]]},"61":{"position":[[800,9],[1737,9]]},"73":{"position":[[268,9]]}},"keywords":{}}],["await",{"_index":248,"title":{},"content":{"24":{"position":[[576,5]]},"30":{"position":[[1049,5]]},"37":{"position":[[937,5]]},"43":{"position":[[833,5]]},"45":{"position":[[522,5]]},"54":{"position":[[1624,5],[2523,5]]},"58":{"position":[[762,5]]},"61":{"position":[[909,5]]},"73":{"position":[[375,5],[2292,5],[3582,5],[3753,5],[4197,5],[5182,5]]}},"keywords":{}}],["base",{"_index":37,"title":{},"content":{"3":{"position":[[80,5],[115,5]]}},"keywords":{}}],["billinginfo",{"_index":360,"title":{},"content":{"30":{"position":[[1376,11]]},"54":{"position":[[3034,11]]},"58":{"position":[[1133,11]]},"73":{"position":[[702,11],[1606,11],[2951,12],[2987,13],[4227,12],[4630,11],[5212,12]]}},"keywords":{}}],["billinginfo.info.shelf.allowedcount",{"_index":365,"title":{},"content":{"30":{"position":[[1561,35]]},"58":{"position":[[1318,35]]},"73":{"position":[[887,35],[1904,35],[4815,35]]}},"keywords":{}}],["billinginfo.info.shelf.currentcount",{"_index":364,"title":{},"content":{"30":{"position":[[1519,35]]},"58":{"position":[[1276,35]]},"73":{"position":[[845,35],[1862,35],[4773,35]]}},"keywords":{}}],["billinginfo?.paid",{"_index":362,"title":{},"content":{"30":{"position":[[1439,20]]},"54":{"position":[[3096,20]]},"58":{"position":[[1196,20]]},"73":{"position":[[765,20],[1719,20],[4693,20]]}},"keywords":{}}],["billingrepo",{"_index":351,"title":{},"content":{"30":{"position":[[832,12]]},"38":{"position":[[1438,12]]},"54":{"position":[[2306,12]]},"58":{"position":[[461,12]]},"59":{"position":[[949,12]]},"73":{"position":[[158,12]]}},"keywords":{}}],["billingrepomock",{"_index":863,"title":{},"content":{"73":{"position":[[3306,15],[3548,16]]}},"keywords":{}}],["billingrepositori",{"_index":352,"title":{},"content":{"30":{"position":[[845,18]]},"38":{"position":[[248,18],[320,18],[1048,18],[1744,18]]},"54":{"position":[[2319,18]]},"58":{"position":[[91,18],[474,18]]},"59":{"position":[[559,18]]},"73":{"position":[[171,18]]}},"keywords":{}}],["billingrepositoryfaker.makebillingdetail",{"_index":877,"title":{},"content":{"73":{"position":[[5245,43]]}},"keywords":{}}],["billingrepositoryfaker.makebillinginfo(billinginfo",{"_index":867,"title":{},"content":{"73":{"position":[[3439,52]]}},"keywords":{}}],["boilerplate/blob/main/application/app.tsx#l44",{"_index":140,"title":{},"content":{"13":{"position":[[39,45]]}},"keywords":{}}],["boilerplate/blob/main/modules/books/features/booklist/uistore/uistore.ts#l76",{"_index":137,"title":{},"content":{"12":{"position":[[39,76]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/enums.t",{"_index":132,"title":{},"content":{"9":{"position":[[39,57]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystore/paymentpolicystore.ts#l33",{"_index":135,"title":{},"content":{"11":{"position":[[39,126]]}},"keywords":{}}],["boilerplate/tree/main/modules/permiss",{"_index":128,"title":{},"content":{"7":{"position":[[39,41]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/polici",{"_index":130,"title":{},"content":{"8":{"position":[[39,81]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/rul",{"_index":134,"title":{},"content":{"10":{"position":[[39,78]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/features/routeguard",{"_index":143,"title":{},"content":{"14":{"position":[[39,62]]}},"keywords":{}}],["book",{"_index":354,"title":{},"content":{"30":{"position":[[1010,8]]},"36":{"position":[[387,6]]},"38":{"position":[[998,6]]},"54":{"position":[[2484,8]]},"58":{"position":[[639,8]]},"59":{"position":[[509,6]]},"66":{"position":[[136,5]]},"73":{"position":[[336,8]]},"76":{"position":[[791,6],[1220,6]]}},"keywords":{}}],["bookbyidqueri",{"_index":724,"title":{},"content":{"61":{"position":[[1770,15]]}},"keywords":{}}],["bookcard",{"_index":398,"title":{},"content":{"30":{"position":[[3063,8]]}},"keywords":{}}],["bookid",{"_index":375,"title":{},"content":{"30":{"position":[[1998,7],[2902,8]]},"49":{"position":[[102,8],[172,8]]},"61":{"position":[[1554,7],[2018,9]]},"75":{"position":[[457,8],[654,9]]}},"keywords":{}}],["bookspolici",{"_index":475,"title":{},"content":{"36":{"position":[[412,11]]},"58":{"position":[[3,11]]}},"keywords":{}}],["bookspolicystor",{"_index":349,"title":{},"content":{"30":{"position":[[704,16]]},"34":{"position":[[201,17]]},"38":{"position":[[739,17],[1005,17]]},"54":{"position":[[1099,16],[2167,16]]},"58":{"position":[[333,16]]},"59":{"position":[[516,17]]},"73":{"position":[[30,16],[3515,17]]}},"keywords":{}}],["booksrepo",{"_index":722,"title":{},"content":{"61":{"position":[[1675,10]]}},"keywords":{}}],["booksrepositori",{"_index":723,"title":{},"content":{"61":{"position":[[1686,15]]}},"keywords":{}}],["boolean",{"_index":549,"title":{},"content":{"44":{"position":[[74,8],[229,8]]},"73":{"position":[[2978,8]]}},"keywords":{}}],["buy",{"_index":726,"title":{},"content":{"61":{"position":[[1850,3]]}},"keywords":{}}],["cacheservic",{"_index":857,"title":{},"content":{"73":{"position":[[3117,12]]}},"keywords":{}}],["cacheservice.createquery(['bil",{"_index":866,"title":{},"content":{"73":{"position":[[3386,37]]}},"keywords":{}}],["cacheservice.createquery(['rol",{"_index":862,"title":{},"content":{"73":{"position":[[3228,35]]}},"keywords":{}}],["calc",{"_index":620,"title":{},"content":{"49":{"position":[[61,5]]},"55":{"position":[[25,5]]}},"keywords":{}}],["calcacceptableag",{"_index":623,"title":{},"content":{"51":{"position":[[175,18]]},"54":{"position":[[429,18],[668,17],[1127,17],[1260,17],[1853,18],[2114,17],[2871,18]]},"55":{"position":[[181,17]]},"61":{"position":[[545,17],[1138,18]]},"74":{"position":[[236,17],[801,20]]}},"keywords":{}}],["calcaccountpay",{"_index":624,"title":{},"content":{"51":{"position":[[208,19]]}},"keywords":{}}],["calcadminpermiss",{"_index":663,"title":{},"content":{"55":{"position":[[84,20]]}},"keywords":{}}],["calcpay",{"_index":635,"title":{},"content":{"54":{"position":[[300,12],[1736,11]]},"61":{"position":[[1021,11]]}},"keywords":{}}],["calcreadingbook",{"_index":621,"title":{},"content":{"49":{"position":[[84,15]]},"54":{"position":[[282,15]]}},"keywords":{}}],["calcreadingonlin",{"_index":658,"title":{},"content":{"54":{"position":[[2738,17]]}},"keywords":{}}],["canreadingbook",{"_index":616,"title":{},"content":{"48":{"position":[[476,16]]}},"keywords":{}}],["case",{"_index":455,"title":{},"content":{"32":{"position":[[149,4]]}},"keywords":{}}],["checkacceptableag",{"_index":665,"title":{},"content":{"55":{"position":[[332,18]]}},"keywords":{}}],["checkadminrol",{"_index":664,"title":{},"content":{"55":{"position":[[281,14]]}},"keywords":{}}],["checkreadingbook",{"_index":622,"title":{},"content":{"49":{"position":[[153,16]]}},"keywords":{}}],["children",{"_index":799,"title":{},"content":{"69":{"position":[[773,9],[840,8],[1085,9],[1196,10]]},"71":{"position":[[318,9],[367,9],[478,9],[541,9]]}},"keywords":{}}],["class",{"_index":225,"title":{},"content":{"24":{"position":[[186,5],[1215,5]]},"30":{"position":[[698,5],[1919,5]]},"37":{"position":[[395,5]]},"38":{"position":[[846,5],[1814,5]]},"43":{"position":[[481,5]]},"45":{"position":[[217,5],[1593,5]]},"47":{"position":[[232,5],[1216,5]]},"54":{"position":[[1307,5],[2161,5]]},"58":{"position":[[327,5]]},"59":{"position":[[357,5]]},"61":{"position":[[592,5],[1475,5]]},"73":{"position":[[24,5]]},"75":{"position":[[251,5]]}},"keywords":{}}],["closepayaccount",{"_index":390,"title":{},"content":{"30":{"position":[[2808,15],[3146,15]]},"61":{"position":[[2340,15]]}},"keywords":{}}],["closepaymentaccount",{"_index":910,"title":{},"content":{"75":{"position":[[1517,19]]}},"keywords":{}}],["const",{"_index":272,"title":{},"content":{"24":{"position":[[1495,5]]},"30":{"position":[[1370,5],[2880,5],[3057,5],[3107,5]]},"38":{"position":[[1697,5]]},"45":{"position":[[1056,5],[1901,5],[1937,5]]},"54":{"position":[[662,5],[1831,5],[2849,5],[3028,5]]},"55":{"position":[[78,5],[175,5],[275,5],[326,5]]},"58":{"position":[[1127,5]]},"60":{"position":[[111,5],[143,5],[183,5]]},"61":{"position":[[1116,5],[1867,5]]},"66":{"position":[[520,5],[907,5],[942,5]]},"69":{"position":[[804,5],[1594,5]]},"71":{"position":[[425,5]]},"73":{"position":[[696,5],[1600,5],[2276,5],[2919,5],[3061,5],[3111,5],[3154,5],[3300,5],[3499,5],[3737,5],[4181,5],[4624,5],[5166,5]]},"74":{"position":[[230,5],[782,5]]},"76":{"position":[[366,5],[429,5],[470,5],[727,5],[849,5],[1156,5],[1315,5]]}},"keywords":{}}],["constructor",{"_index":230,"title":{},"content":{"24":{"position":[[253,12],[1231,12]]},"30":{"position":[[767,12],[1968,12]]},"37":{"position":[[462,12]]},"43":{"position":[[548,12]]},"45":{"position":[[251,12]]},"54":{"position":[[1378,12],[2230,12]]},"58":{"position":[[396,12]]},"61":{"position":[[663,12],[1524,12]]},"73":{"position":[[93,12]]},"75":{"position":[[304,12]]}},"keywords":{}}],["constructor(billingrepo",{"_index":491,"title":{},"content":{"38":{"position":[[1023,24]]},"59":{"position":[[534,24]]}},"keywords":{}}],["constructor(priv",{"_index":501,"title":{},"content":{"38":{"position":[[1830,19]]},"45":{"position":[[1609,19]]}},"keywords":{}}],["content",{"_index":807,"title":{},"content":{"69":{"position":[[1074,10]]}},"keywords":{}}],["contentstateнеобходим",{"_index":684,"title":{},"content":{"59":{"position":[[1794,22]]}},"keywords":{}}],["control",{"_index":39,"title":{},"content":{"3":{"position":[[93,8],[128,9]]}},"keywords":{}}],["createadministrationpolicystor",{"_index":488,"title":{},"content":{"38":{"position":[[594,32],[1315,32]]},"59":{"position":[[826,32]]}},"keywords":{}}],["createallowedpermiss",{"_index":922,"title":{},"content":{"76":{"position":[[201,24],[815,26]]}},"keywords":{}}],["createbook.tsx",{"_index":756,"title":{},"content":{"66":{"position":[[113,14]]}},"keywords":{}}],["createbookpag",{"_index":761,"title":{},"content":{"66":{"position":[[526,14],[662,15]]},"69":{"position":[[1600,14],[1736,15]]}},"keywords":{}}],["createbookspolicystor",{"_index":489,"title":{},"content":{"38":{"position":[[627,23],[1394,23]]},"59":{"position":[[905,23]]}},"keywords":{}}],["createcacheservic",{"_index":858,"title":{},"content":{"73":{"position":[[3132,21]]}},"keywords":{}}],["createdenialpermiss",{"_index":921,"title":{},"content":{"76":{"position":[[95,22],[226,22],[1244,23]]}},"keywords":{}}],["createpaymentpolicystor",{"_index":490,"title":{},"content":{"38":{"position":[[651,25]]}},"keywords":{}}],["createpermiss",{"_index":545,"title":{},"content":{"44":{"position":[[1,16]]}},"keywords":{}}],["createpolicymanagerstor",{"_index":487,"title":{},"content":{"38":{"position":[[530,24],[1265,27]]},"59":{"position":[[254,24],[776,27]]},"73":{"position":[[3083,27]]}},"keywords":{}}],["createrul",{"_index":629,"title":{},"content":{"53":{"position":[[27,10]]},"54":{"position":[[614,10]]}},"keywords":{}}],["createrule((allow",{"_index":640,"title":{},"content":{"54":{"position":[[745,18]]},"74":{"position":[[313,18]]}},"keywords":{}}],["createuistor",{"_index":391,"title":{},"content":{"30":{"position":[[2886,13]]}},"keywords":{}}],["createuistore(id",{"_index":401,"title":{},"content":{"30":{"position":[[3185,19]]}},"keywords":{}}],["creationbookscreen",{"_index":759,"title":{},"content":{"66":{"position":[[410,18]]},"69":{"position":[[1484,18]]}},"keywords":{}}],["currentcount",{"_index":879,"title":{},"content":{"73":{"position":[[5298,13]]}},"keywords":{}}],["data",{"_index":438,"title":{},"content":{"31":{"position":[[769,6]]}},"keywords":{}}],["date",{"_index":645,"title":{},"content":{"54":{"position":[[974,7]]},"74":{"position":[[552,8]]}},"keywords":{}}],["date(userbirthday",{"_index":644,"title":{},"content":{"54":{"position":[[950,19]]},"74":{"position":[[528,19]]}},"keywords":{}}],["default",{"_index":765,"title":{},"content":{"66":{"position":[[654,7],[1184,7]]},"69":{"position":[[1728,7]]}},"keywords":{}}],["deletingorgan",{"_index":324,"title":{},"content":{"28":{"position":[[403,21],[638,21]]}},"keywords":{}}],["deni",{"_index":254,"title":{},"content":{"24":{"position":[[769,5]]},"30":{"position":[[1287,5]]},"43":{"position":[[1026,5]]},"45":{"position":[[722,5]]},"47":{"position":[[358,5],[576,5],[789,5],[1342,5]]},"54":{"position":[[764,5],[1817,5],[2835,5]]},"58":{"position":[[1044,5]]},"61":{"position":[[1102,5]]},"73":{"position":[[613,5],[1392,4],[1479,5],[4421,4],[4541,5],[4995,4]]},"74":{"position":[[190,4],[332,5]]}},"keywords":{}}],["denialmissingdatapermiss",{"_index":738,"title":{},"content":{"62":{"position":[[151,27]]}},"keywords":{}}],["denialswitch",{"_index":801,"title":{},"content":{"69":{"position":[[963,15],[1241,12]]},"71":{"position":[[271,13],[464,13]]}},"keywords":{}}],["denialswitch[permission.reason",{"_index":819,"title":{},"content":{"71":{"position":[[556,33],[599,32]]}},"keywords":{}}],["deny(agepermission.reason",{"_index":655,"title":{},"content":{"54":{"position":[[1980,27],[2998,27]]},"61":{"position":[[1265,27]]}},"keywords":{}}],["deny(permissiondenialreason.exceedshelfcount",{"_index":366,"title":{},"content":{"30":{"position":[[1608,46]]},"58":{"position":[[1365,46]]},"73":{"position":[[934,46],[1951,46],[4862,46]]}},"keywords":{}}],["deny(permissiondenialreason.missingdata",{"_index":641,"title":{},"content":{"54":{"position":[[807,41]]},"74":{"position":[[375,41]]}},"keywords":{}}],["deny(permissiondenialreason.missinguserag",{"_index":642,"title":{},"content":{"54":{"position":[[879,44]]},"74":{"position":[[447,44]]}},"keywords":{}}],["deny(permissiondenialreason.noadmin",{"_index":265,"title":{},"content":{"24":{"position":[[1108,37]]},"43":{"position":[[1171,37]]},"45":{"position":[[805,37]]},"47":{"position":[[441,37],[659,37],[872,37],[1425,37]]}},"keywords":{}}],["deny(permissiondenialreason.nopayaccount",{"_index":363,"title":{},"content":{"30":{"position":[[1469,42]]},"54":{"position":[[3126,42]]},"58":{"position":[[1226,42]]},"73":{"position":[[795,42],[1749,42],[4723,42]]}},"keywords":{}}],["deny(permissiondenialreason.notforyourag",{"_index":647,"title":{},"content":{"54":{"position":[[1011,43]]},"74":{"position":[[591,43]]}},"keywords":{}}],["deny(permissiondenialreason.twofa",{"_index":262,"title":{},"content":{"24":{"position":[[1001,35]]}},"keywords":{}}],["describ",{"_index":837,"title":{},"content":{"73":{"position":[[1127,9]]}},"keywords":{}}],["describe('administrationpolicystor",{"_index":838,"title":{},"content":{"73":{"position":[[1138,37]]}},"keywords":{}}],["describe('bookspolicystor",{"_index":845,"title":{},"content":{"73":{"position":[[2140,28],[2879,28]]}},"keywords":{}}],["describe('calcacceptableag",{"_index":890,"title":{},"content":{"74":{"position":[[652,29]]}},"keywords":{}}],["describe('goodsliststor",{"_index":911,"title":{},"content":{"75":{"position":[[1617,26]]},"76":{"position":[[279,26]]}},"keywords":{}}],["describe('добавлен",{"_index":839,"title":{},"content":{"73":{"position":[[1187,20],[2180,20],[3641,20]]},"75":{"position":[[1655,20]]},"76":{"position":[[317,20]]}},"keywords":{}}],["describe('доступ",{"_index":891,"title":{},"content":{"74":{"position":[[693,17]]}},"keywords":{}}],["doc",{"_index":320,"title":{},"content":{"28":{"position":[[246,4],[462,4],[689,4],[718,4]]}},"keywords":{}}],["docact",{"_index":104,"title":{},"content":{"4":{"position":[[638,11]]},"5":{"position":[[45,10],[219,10],[447,11]]},"28":{"position":[[268,11],[625,10]]}},"keywords":{}}],["domain",{"_index":797,"title":{},"content":{"69":{"position":[[682,18]]},"71":{"position":[[80,15],[135,15]]}},"keywords":{}}],["dx",{"_index":198,"title":{},"content":{"21":{"position":[[122,2]]},"38":{"position":[[2204,2]]}},"keywords":{}}],["enum",{"_index":414,"title":{"31":{"position":[[29,5]]}},"content":{"31":{"position":[[124,4],[291,4],[580,4],[952,4]]},"37":{"position":[[223,20]]},"43":{"position":[[309,20]]}},"keywords":{}}],["enums.t",{"_index":464,"title":{},"content":{"34":{"position":[[333,8]]},"51":{"position":[[308,8]]}},"keywords":{}}],["error",{"_index":434,"title":{},"content":{"31":{"position":[[681,7]]}},"keywords":{}}],["errorlist",{"_index":704,"title":{},"content":{"60":{"position":[[544,10]]}},"keywords":{}}],["errorst",{"_index":703,"title":{},"content":{"60":{"position":[[530,13]]}},"keywords":{}}],["exampl",{"_index":550,"title":{},"content":{"44":{"position":[[140,8]]}},"keywords":{}}],["example/data",{"_index":478,"title":{},"content":{"37":{"position":[[167,16]]},"38":{"position":[[289,16],[361,16]]},"43":{"position":[[253,16]]}},"keywords":{}}],["example/modules/permiss",{"_index":372,"title":{},"content":{"30":{"position":[[1880,31]]},"45":{"position":[[1017,31]]},"66":{"position":[[488,31],[875,31]]},"69":{"position":[[1562,31]]}},"keywords":{}}],["example/screen",{"_index":760,"title":{},"content":{"66":{"position":[[436,19],[766,19]]},"69":{"position":[[1510,19]]}},"keywords":{}}],["example/shar",{"_index":770,"title":{},"content":{"66":{"position":[[818,18]]},"69":{"position":[[606,18]]},"71":{"position":[[29,18]]}},"keywords":{}}],["expect(notifymock.info).tobecalledwith('книг",{"_index":930,"title":{},"content":{"76":{"position":[[901,45]]}},"keywords":{}}],["expect(permission.isallowed).tobefalsi",{"_index":893,"title":{},"content":{"74":{"position":[[822,41]]}},"keywords":{}}],["expect(permission.reason).tobe(permissiondenialreason.missingdata",{"_index":894,"title":{},"content":{"74":{"position":[[864,67]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobefalsi",{"_index":872,"title":{},"content":{"73":{"position":[[4261,48]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobetruthi",{"_index":850,"title":{},"content":{"73":{"position":[[2324,49],[3785,49],[5345,49]]}},"keywords":{}}],["expect(sut.addingtoshelf.reason).tob",{"_index":873,"title":{},"content":{"73":{"position":[[4310,38]]}},"keywords":{}}],["expect(sut.isopenaccountpayment).tobetruthi",{"_index":931,"title":{},"content":{"76":{"position":[[1360,46]]}},"keywords":{}}],["export",{"_index":224,"title":{},"content":{"24":{"position":[[179,6],[1208,6]]},"30":{"position":[[691,6],[1912,6],[2873,6],[3050,6]]},"31":{"position":[[284,6],[573,6],[945,6]]},"37":{"position":[[388,6]]},"38":{"position":[[839,6],[1690,6],[1807,6]]},"43":{"position":[[474,6]]},"45":{"position":[[1049,6],[1586,6],[1894,6]]},"54":{"position":[[655,6],[1300,6],[2154,6]]},"58":{"position":[[320,6]]},"59":{"position":[[350,6]]},"60":{"position":[[104,6]]},"61":{"position":[[585,6],[1468,6]]},"66":{"position":[[647,6],[1177,6]]},"69":{"position":[[797,6],[1721,6]]},"71":{"position":[[418,6]]},"73":{"position":[[17,6]]},"74":{"position":[[223,6]]},"75":{"position":[[244,6]]}},"keywords":{}}],["extend",{"_index":920,"title":{},"content":{"76":{"position":[[84,8],[181,10]]}},"keywords":{}}],["extern",{"_index":369,"title":{},"content":{"30":{"position":[[1790,8]]}},"keywords":{}}],["factor",{"_index":218,"title":{"23":{"position":[[9,6]]}},"content":{},"keywords":{}}],["fals",{"_index":374,"title":{},"content":{"30":{"position":[[1961,6],[2861,6]]},"61":{"position":[[1517,6],[2393,6]]},"62":{"position":[[194,6]]},"73":{"position":[[4220,6],[4248,5],[5205,6]]},"75":{"position":[[297,6],[1578,6]]}},"keywords":{}}],["featur",{"_index":148,"title":{"16":{"position":[[0,7]]},"17":{"position":[[31,7]]}},"content":{"17":{"position":[[32,7],[73,7],[145,7]]},"24":{"position":[[873,8]]},"41":{"position":[[284,7]]},"42":{"position":[[589,7]]},"45":{"position":[[855,8]]},"47":{"position":[[1490,8]]},"62":{"position":[[41,9]]},"64":{"position":[[112,9]]},"66":{"position":[[204,9]]}},"keywords":{}}],["featuretoggl",{"_index":210,"title":{},"content":{"21":{"position":[[353,13]]}},"keywords":{}}],["frontend",{"_index":21,"title":{},"content":{"1":{"position":[[108,8]]}},"keywords":{}}],["frontend'е",{"_index":41,"title":{},"content":{"3":{"position":[[142,10]]}},"keywords":{}}],["frontend.shar",{"_index":10,"title":{},"content":{"0":{"position":[[97,16]]}},"keywords":{}}],["getbillinginfoqueri",{"_index":865,"title":{},"content":{"73":{"position":[[3356,20]]}},"keywords":{}}],["getdateyeardiff(new",{"_index":643,"title":{},"content":{"54":{"position":[[929,20]]}},"keywords":{}}],["getrolesqueri",{"_index":861,"title":{},"content":{"73":{"position":[[3204,14]]}},"keywords":{}}],["github",{"_index":12,"title":{},"content":{"0":{"position":[[131,7]]}},"keywords":{}}],["gt",{"_index":247,"title":{},"content":{"24":{"position":[[568,5],[775,5],[1487,5]]},"30":{"position":[[1041,5],[1293,5],[1555,5],[2181,5],[2760,5],[2829,5],[2919,5],[3099,5],[3179,5],[3254,5],[3419,5]]},"37":{"position":[[929,5]]},"38":{"position":[[1547,5]]},"43":{"position":[[825,5],[1032,5]]},"44":{"position":[[223,5]]},"45":{"position":[[514,5],[728,5],[1084,5],[1315,5],[1929,5]]},"47":{"position":[[364,5],[582,5],[795,5],[1348,5]]},"49":{"position":[[119,5],[189,5]]},"54":{"position":[[739,5],[770,5],[1616,5],[1774,5],[1823,5],[2515,5],[2783,5],[2841,5]]},"55":{"position":[[122,5],[249,5],[313,5],[401,5]]},"58":{"position":[[754,5],[1050,5],[1312,5]]},"59":{"position":[[1058,5]]},"60":{"position":[[135,5],[260,5],[431,5],[624,4]]},"61":{"position":[[901,5],[1059,5],[1108,5],[1859,5],[2292,5],[2361,5]]},"66":{"position":[[546,5],[610,5],[934,5],[1048,6],[1134,5]]},"69":{"position":[[859,5],[1167,5],[1179,5],[1191,4],[1620,5],[1684,5]]},"71":{"position":[[498,5],[768,6],[925,6],[987,6]]},"73":{"position":[[367,5],[619,5],[881,5],[1179,5],[1228,5],[1485,5],[1898,5],[2172,5],[2221,5],[2268,5],[2429,5],[2504,5],[2593,5],[2703,5],[2911,5],[3053,5],[3222,5],[3273,5],[3380,5],[3433,5],[3682,5],[3729,5],[4173,5],[4547,5],[4809,5],[5158,5]]},"74":{"position":[[307,5],[338,5],[685,5],[720,5],[774,5],[992,5],[1067,5],[1199,5]]},"75":{"position":[[474,5],[1465,5],[1542,5],[1647,5],[1696,5],[1786,5],[1888,5],[1996,5],[2115,5]]},"76":{"position":[[309,5],[358,5],[421,5],[664,5],[1067,5]]}},"keywords":{}}],["guard",{"_index":142,"title":{"14":{"position":[[6,7]]},"15":{"position":[[20,7]]},"63":{"position":[[6,7]]},"65":{"position":[[0,5]]},"68":{"position":[[15,6]]}},"content":{"64":{"position":[[11,6]]},"65":{"position":[[7,5],[109,5]]},"67":{"position":[[21,5],[131,6]]},"68":{"position":[[69,6],[182,5],[313,6]]},"69":{"position":[[416,6]]}},"keywords":{}}],["hasreason",{"_index":552,"title":{},"content":{"44":{"position":[[195,10]]}},"keywords":{}}],["header",{"_index":804,"title":{},"content":{"69":{"position":[[1030,9]]}},"keywords":{}}],["https://github.com/kaluga",{"_index":126,"title":{},"content":{"7":{"position":[[1,25]]},"8":{"position":[[1,25]]},"9":{"position":[[1,25]]},"10":{"position":[[1,25]]},"11":{"position":[[1,25]]},"12":{"position":[[1,25]]},"13":{"position":[[1,25]]},"14":{"position":[[1,25]]}},"keywords":{}}],["id",{"_index":397,"title":{},"content":{"30":{"position":[[3035,3],[3086,2]]},"66":{"position":[[950,2],[979,5]]},"76":{"position":[[947,2]]}},"keywords":{}}],["id={id",{"_index":778,"title":{},"content":{"66":{"position":[[1126,7]]}},"keywords":{}}],["id={id}>",{"_index":776,"title":{},"content":{"66":{"position":[[1092,11]]}},"keywords":{}}],["import",{"_index":348,"title":{},"content":{"30":{"position":[[625,6],[1804,6]]},"31":{"position":[[887,6]]},"37":{"position":[[88,6],[131,6],[184,6],[322,6]]},"38":{"position":[[196,6],[239,6],[306,6],[458,6],[521,6],[585,6],[698,6]]},"43":{"position":[[174,6],[217,6],[270,6],[408,6]]},"45":{"position":[[940,6],[984,6]]},"54":{"position":[[605,6],[1251,6],[2105,6]]},"58":{"position":[[254,6]]},"59":{"position":[[182,6],[245,6]]},"61":{"position":[[536,6]]},"66":{"position":[[401,6],[456,6],[716,6],[786,6],[837,6]]},"69":{"position":[[482,6],[522,6],[566,6],[625,6],[701,6],[1475,6],[1530,6]]},"71":{"position":[[1,6],[48,6],[96,6]]},"76":{"position":[[143,6],[192,6]]}},"keywords":{}}],["index.t",{"_index":462,"title":{},"content":{"34":{"position":[[267,8],[316,8],[350,8]]},"51":{"position":[[242,8],[291,8],[325,8]]},"64":{"position":[[222,8],[241,8],[258,8]]},"66":{"position":[[314,8],[333,8],[350,8]]}},"keywords":{}}],["info",{"_index":876,"title":{},"content":{"73":{"position":[[5239,5]]}},"keywords":{}}],["intern",{"_index":433,"title":{},"content":{"31":{"position":[[671,9]]}},"keywords":{}}],["internalerror",{"_index":432,"title":{},"content":{"31":{"position":[[655,13],[1032,13]]}},"keywords":{}}],["intro",{"_index":13,"title":{"1":{"position":[[0,5]]},"18":{"position":[[0,5]]}},"content":{"1":{"position":[[0,5]]}},"keywords":{}}],["invalid",{"_index":615,"title":{},"content":{"48":{"position":[[456,7]]},"49":{"position":[[137,7]]},"55":{"position":[[266,7]]}},"keywords":{}}],["isaddtoshelf",{"_index":617,"title":{},"content":{"48":{"position":[[512,14]]}},"keywords":{}}],["isadmin",{"_index":849,"title":{},"content":{"73":{"position":[[2306,8],[2942,8],[2969,8],[3282,8],[3767,8],[4211,8],[5196,8]]}},"keywords":{}}],["isallow",{"_index":548,"title":{},"content":{"44":{"position":[[63,10]]},"62":{"position":[[183,10]]}},"keywords":{}}],["isallowedbookcr",{"_index":502,"title":{},"content":{"38":{"position":[[1955,23]]},"45":{"position":[[1734,23],[1946,21],[2043,22]]}},"keywords":{}}],["iserror={permissionsstatus.iserror",{"_index":701,"title":{},"content":{"60":{"position":[[454,35]]}},"keywords":{}}],["isloading={permissionsstatus.isload",{"_index":702,"title":{},"content":{"60":{"position":[[490,39]]}},"keywords":{}}],["isopen={isopenpayaccount",{"_index":410,"title":{},"content":{"30":{"position":[[3367,25]]}},"keywords":{}}],["isopenaccountpay",{"_index":899,"title":{},"content":{"75":{"position":[[274,20]]}},"keywords":{}}],["isopenpayaccount",{"_index":373,"title":{},"content":{"30":{"position":[[1942,16],[3128,17]]},"61":{"position":[[1498,16]]}},"keywords":{}}],["issu",{"_index":0,"title":{"0":{"position":[[0,6]]}},"content":{"0":{"position":[[0,6]]}},"keywords":{}}],["it('доступ",{"_index":895,"title":{},"content":{"74":{"position":[[1082,10]]}},"keywords":{}}],["it('доступн",{"_index":846,"title":{},"content":{"73":{"position":[[2229,12],[2604,13],[3690,12],[5059,13]]}},"keywords":{}}],["it('есл",{"_index":892,"title":{},"content":{"74":{"position":[[728,8],[936,8],[1003,8]]}},"keywords":{}}],["it('недоступн",{"_index":851,"title":{},"content":{"73":{"position":[[2378,15],[2440,15],[2515,15],[4122,15]]}},"keywords":{}}],["it('открыва",{"_index":913,"title":{},"content":{"75":{"position":[[1797,13]]},"76":{"position":[[976,13]]}},"keywords":{}}],["it('показыва",{"_index":912,"title":{},"content":{"75":{"position":[[1704,14],[1899,14],[2007,14]]},"76":{"position":[[582,14]]}},"keywords":{}}],["jsdoc",{"_index":450,"title":{},"content":{"32":{"position":[[60,5]]}},"keywords":{}}],["kebab",{"_index":454,"title":{},"content":{"32":{"position":[[143,5]]}},"keywords":{}}],["lite",{"_index":564,"title":{},"content":{"45":{"position":[[977,6]]},"69":{"position":[[559,6]]}},"keywords":{}}],["lt",{"_index":646,"title":{},"content":{"54":{"position":[[982,4]]},"74":{"position":[[561,4]]}},"keywords":{}}],["lt;>",{"_index":402,"title":{},"content":{"30":{"position":[[3214,8]]}},"keywords":{}}],["lt;/>",{"_index":412,"title":{},"content":{"30":{"position":[[3425,9]]}},"keywords":{}}],["lt;/adminrouteguard>",{"_index":764,"title":{},"content":{"66":{"position":[[616,24]]},"69":{"position":[[1690,24]]}},"keywords":{}}],["lt;/container>",{"_index":408,"title":{},"content":{"30":{"position":[[3328,18]]}},"keywords":{}}],["lt;/contentstate>",{"_index":708,"title":{},"content":{"60":{"position":[[681,21]]}},"keywords":{}}],["lt;/permissionguard>",{"_index":811,"title":{},"content":{"69":{"position":[[1207,24]]}},"keywords":{}}],["lt;/readingbookrouteguard>",{"_index":779,"title":{},"content":{"66":{"position":[[1140,30]]}},"keywords":{}}],["lt;/routerlink>",{"_index":570,"title":{},"content":{"45":{"position":[[1293,19],[2157,19]]}},"keywords":{}}],["lt;/sidebar>",{"_index":571,"title":{},"content":{"45":{"position":[[1321,16],[2201,16]]}},"keywords":{}}],["lt;/sidebaritem>",{"_index":584,"title":{},"content":{"45":{"position":[[2180,20]]}},"keywords":{}}],["lt;/themeprovider>",{"_index":709,"title":{},"content":{"60":{"position":[[703,22]]}},"keywords":{}}],["lt;adminrouteguard>",{"_index":762,"title":{},"content":{"66":{"position":[[563,23]]},"69":{"position":[[1637,23]]}},"keywords":{}}],["lt;bookinfo",{"_index":404,"title":{},"content":{"30":{"position":[[3241,12]]}},"keywords":{}}],["lt;button",{"_index":405,"title":{},"content":{"30":{"position":[[3260,10]]}},"keywords":{}}],["lt;container>",{"_index":403,"title":{},"content":{"30":{"position":[[3223,17]]}},"keywords":{}}],["lt;contentst",{"_index":700,"title":{},"content":{"60":{"position":[[437,16]]}},"keywords":{}}],["lt;creationbookscreen",{"_index":763,"title":{},"content":{"66":{"position":[[587,22]]},"69":{"position":[[1661,22]]}},"keywords":{}}],["lt;mainlayout>{renderroutes}</mainlayout>",{"_index":707,"title":{},"content":{"60":{"position":[[629,51]]}},"keywords":{}}],["lt;notfoundscreen",{"_index":772,"title":{},"content":{"66":{"position":[[994,18]]}},"keywords":{}}],["lt;notificationcontain",{"_index":699,"title":{},"content":{"60":{"position":[[405,25]]}},"keywords":{}}],["lt;pagelayout",{"_index":803,"title":{},"content":{"69":{"position":[[1015,14]]}},"keywords":{}}],["lt;payaccountmod",{"_index":409,"title":{},"content":{"30":{"position":[[3347,19]]}},"keywords":{}}],["lt;permissionguard",{"_index":800,"title":{},"content":{"69":{"position":[[876,19]]}},"keywords":{}}],["lt;permissionsgateway",{"_index":566,"title":{},"content":{"45":{"position":[[1117,22]]}},"keywords":{}}],["lt;placehold",{"_index":808,"title":{},"content":{"69":{"position":[[1097,15]]},"71":{"position":[[706,15],[851,15],[941,15]]}},"keywords":{}}],["lt;readingbookrouteguard",{"_index":775,"title":{},"content":{"66":{"position":[[1066,25]]}},"keywords":{}}],["lt;readingbookscreen",{"_index":777,"title":{},"content":{"66":{"position":[[1104,21]]}},"keywords":{}}],["lt;routerlink",{"_index":568,"title":{},"content":{"45":{"position":[[1215,14],[2079,14]]}},"keywords":{}}],["lt;sidebar>",{"_index":565,"title":{},"content":{"45":{"position":[[1101,15],[2007,15]]}},"keywords":{}}],["lt;sidebaritem>",{"_index":582,"title":{},"content":{"45":{"position":[[2023,19]]}},"keywords":{}}],["lt;themeprovid",{"_index":697,"title":{},"content":{"60":{"position":[[369,17]]}},"keywords":{}}],["makeautoobserv",{"_index":476,"title":{},"content":{"37":{"position":[[97,18]]},"38":{"position":[[205,18]]},"43":{"position":[[183,18]]}},"keywords":{}}],["makeautoobservable(thi",{"_index":237,"title":{},"content":{"24":{"position":[[403,24],[1407,24]]},"30":{"position":[[911,24],[2106,24]]},"37":{"position":[[574,24]]},"38":{"position":[[1095,24],[1892,24]]},"43":{"position":[[660,24]]},"45":{"position":[[363,24],[1671,24]]},"54":{"position":[[1484,24],[2385,24]]},"58":{"position":[[540,24]]},"59":{"position":[[606,24]]},"61":{"position":[[769,24],[1706,24]]},"73":{"position":[[237,24]]},"75":{"position":[[409,25]]}},"keywords":{}}],["math.abs(getdateyeardiff(new",{"_index":889,"title":{},"content":{"74":{"position":[[499,28]]}},"keywords":{}}],["miss",{"_index":437,"title":{},"content":{"31":{"position":[[760,8]]}},"keywords":{}}],["missingdata",{"_index":436,"title":{},"content":{"31":{"position":[[746,11],[1139,11]]}},"keywords":{}}],["mobx",{"_index":477,"title":{},"content":{"37":{"position":[[123,7]]},"38":{"position":[[231,7]]},"43":{"position":[[209,7]]},"45":{"position":[[965,5]]},"69":{"position":[[547,5]]}},"keywords":{}}],["mock",{"_index":919,"title":{},"content":{"76":{"position":[[79,4],[176,4]]}},"keywords":{}}],["mock<billingrepository>",{"_index":864,"title":{},"content":{"73":{"position":[[3324,31]]}},"keywords":{}}],["mock<notify>",{"_index":925,"title":{},"content":{"76":{"position":[[448,21]]}},"keywords":{}}],["mock<userrepository>",{"_index":860,"title":{},"content":{"73":{"position":[[3175,28]]}},"keywords":{}}],["mockdeep",{"_index":916,"title":{},"content":{"76":{"position":[[49,8],[152,8]]}},"keywords":{}}],["mockdeep<permissionsstore>",{"_index":928,"title":{},"content":{"76":{"position":[[756,34],[1185,34]]}},"keywords":{}}],["modul",{"_index":125,"title":{"7":{"position":[[12,7]]},"25":{"position":[[19,6]]}},"content":{"34":{"position":[[52,8]]},"36":{"position":[[1,7],[192,8]]},"51":{"position":[[48,8]]},"64":{"position":[[76,8]]},"66":{"position":[[168,8]]},"75":{"position":[[143,7]]}},"keywords":{}}],["modules/books/features/bookcard/bookcard.tsx",{"_index":394,"title":{},"content":{"30":{"position":[[2974,44]]}},"keywords":{}}],["modules/books/features/bookcard/uistor",{"_index":367,"title":{},"content":{"30":{"position":[[1676,39]]},"61":{"position":[[1427,39]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/sidebar.tsx",{"_index":580,"title":{},"content":{"45":{"position":[[1838,54]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/uistor",{"_index":266,"title":{},"content":{"24":{"position":[[1156,50]]},"45":{"position":[[1534,50]]}},"keywords":{}}],["modules/permissions/domain/enums.t",{"_index":421,"title":{},"content":{"31":{"position":[[246,36]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/administrationpolicystor",{"_index":223,"title":{},"content":{"24":{"position":[[92,85]]},"37":{"position":[[1,85]]},"43":{"position":[[87,85]]},"45":{"position":[[130,85]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolici",{"_index":343,"title":{},"content":{"30":{"position":[[474,71]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolicystor",{"_index":656,"title":{},"content":{"54":{"position":[[2027,76]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystor",{"_index":648,"title":{},"content":{"54":{"position":[[1171,78]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/rules/calcacceptableag",{"_index":636,"title":{},"content":{"54":{"position":[[449,74]]}},"keywords":{}}],["modules/permissions/features/routeguard",{"_index":741,"title":{},"content":{"64":{"position":[[29,41]]},"68":{"position":[[3,40]]}},"keywords":{}}],["modules/permissions/features/routeguards/adminrouteguard",{"_index":793,"title":{},"content":{"69":{"position":[[424,56]]}},"keywords":{}}],["name",{"_index":242,"title":{},"content":{"24":{"position":[[501,5]]},"30":{"position":[[1004,5]]},"37":{"position":[[772,5]]},"43":{"position":[[758,5]]},"45":{"position":[[447,5]]},"54":{"position":[[1577,5],[2478,5]]},"58":{"position":[[633,5]]},"61":{"position":[[862,5]]},"73":{"position":[[330,5]]}},"keywords":{}}],["new",{"_index":392,"title":{},"content":{"30":{"position":[[2925,3]]},"38":{"position":[[1722,3]]},"54":{"position":[[970,3]]},"73":{"position":[[3511,3]]},"74":{"position":[[548,3]]},"76":{"position":[[482,3]]}},"keywords":{}}],["noadmin",{"_index":423,"title":{},"content":{"31":{"position":[[361,7],[1230,7]]}},"keywords":{}}],["nopayaccount",{"_index":424,"title":{},"content":{"31":{"position":[[414,12]]},"76":{"position":[[1143,12]]}},"keywords":{}}],["notfoundscreen",{"_index":767,"title":{},"content":{"66":{"position":[[725,15]]}},"keywords":{}}],["notifi",{"_index":269,"title":{},"content":{"24":{"position":[[1362,7]]},"30":{"position":[[2094,7],[2963,8]]},"61":{"position":[[1650,7]]},"75":{"position":[[397,7]]}},"keywords":{}}],["notifymock",{"_index":924,"title":{},"content":{"76":{"position":[[435,10],[516,12],[560,11],[857,10]]}},"keywords":{}}],["notifyservic",{"_index":268,"title":{},"content":{"24":{"position":[[1347,14]]},"30":{"position":[[2079,14]]},"61":{"position":[[1635,14]]},"75":{"position":[[382,14]]}},"keywords":{}}],["number",{"_index":638,"title":{},"content":{"54":{"position":[[706,7],[1766,7],[2775,7]]},"61":{"position":[[1051,7]]},"74":{"position":[[274,7]]}},"keywords":{}}],["observ",{"_index":399,"title":{},"content":{"30":{"position":[[3074,11]]},"45":{"position":[[949,8],[1072,11],[1917,11]]},"60":{"position":[[123,11]]},"69":{"position":[[531,8],[828,11]]}},"keywords":{}}],["onclick={addtoshelf}>добав",{"_index":406,"title":{},"content":{"30":{"position":[[3271,32]]}},"keywords":{}}],["onclose={closepayaccount",{"_index":411,"title":{},"content":{"30":{"position":[[3393,25]]}},"keywords":{}}],["onretri",{"_index":706,"title":{},"content":{"60":{"position":[[582,8]]}},"keywords":{}}],["opendoccr",{"_index":271,"title":{},"content":{"24":{"position":[[1466,15]]}},"keywords":{}}],["openpayaccount",{"_index":388,"title":{},"content":{"30":{"position":[[2740,14]]},"61":{"position":[[2272,14]]}},"keywords":{}}],["openpaymentaccount",{"_index":908,"title":{},"content":{"75":{"position":[[1441,18]]}},"keywords":{}}],["organ",{"_index":323,"title":{},"content":{"28":{"position":[[317,12],[373,12],[696,13],[725,12]]}},"keywords":{}}],["organizationmanag",{"_index":613,"title":{},"content":{"48":{"position":[[264,22],[419,24]]}},"keywords":{}}],["overhead",{"_index":782,"title":{},"content":{"67":{"position":[[65,9]]}},"keywords":{}}],["page",{"_index":147,"title":{"65":{"position":[[28,5]]}},"content":{"15":{"position":[[24,4]]},"65":{"position":[[41,5],[127,4],[187,5]]},"66":{"position":[[20,6],[81,6]]}},"keywords":{}}],["pagebook",{"_index":145,"title":{},"content":{"15":{"position":[[7,8]]}},"keywords":{}}],["pagelayout",{"_index":795,"title":{},"content":{"69":{"position":[[575,11]]}},"keywords":{}}],["paid",{"_index":871,"title":{},"content":{"73":{"position":[[4242,5],[5227,5]]}},"keywords":{}}],["partial<billingrepositorydto.billinginfo>",{"_index":856,"title":{},"content":{"73":{"position":[[3001,48]]}},"keywords":{}}],["pay",{"_index":425,"title":{},"content":{"31":{"position":[[433,3]]}},"keywords":{}}],["payment",{"_index":650,"title":{},"content":{"54":{"position":[[1583,10]]},"61":{"position":[[868,10]]}},"keywords":{}}],["paymentaccount",{"_index":88,"title":{},"content":{"4":{"position":[[319,16]]}},"keywords":{}}],["paymentaccountfreeaccount",{"_index":71,"title":{},"content":{"4":{"position":[[32,25]]}},"keywords":{}}],["paymentpolicystor",{"_index":461,"title":{},"content":{"34":{"position":[[233,19]]},"38":{"position":[[757,19]]},"54":{"position":[[1078,18],[1313,18]]},"61":{"position":[[598,18]]}},"keywords":{}}],["paypermiss",{"_index":727,"title":{},"content":{"61":{"position":[[1873,13]]}},"keywords":{}}],["paypermission.hasreason(permissiondenialreason.notacceptag",{"_index":731,"title":{},"content":{"61":{"position":[[2053,62]]}},"keywords":{}}],["paypermission.isallow",{"_index":729,"title":{},"content":{"61":{"position":[[1956,25]]}},"keywords":{}}],["permiss",{"_index":103,"title":{"7":{"position":[[0,11]]},"12":{"position":[[14,11]]},"16":{"position":[[17,11]]},"17":{"position":[[0,11]]},"25":{"position":[[7,11]]},"26":{"position":[[7,11]]},"41":{"position":[[13,11]]},"43":{"position":[[9,11]]},"44":{"position":[[4,11]]},"45":{"position":[[34,11]]},"46":{"position":[[0,10]]},"52":{"position":[[33,12]]},"75":{"position":[[36,12]]},"76":{"position":[[4,12]]}},"content":{"4":{"position":[[627,10]]},"5":{"position":[[26,11]]},"17":{"position":[[1,11],[102,13],[194,12]]},"24":{"position":[[1261,12],[1501,10]]},"28":{"position":[[596,11]]},"30":{"position":[[2031,12]]},"31":{"position":[[60,11]]},"34":{"position":[[67,12]]},"36":{"position":[[66,11],[211,10]]},"37":{"position":[[712,11]]},"38":{"position":[[1859,12]]},"39":{"position":[[77,11],[116,11]]},"41":{"position":[[21,11],[249,10]]},"42":{"position":[[74,10],[346,10],[575,11],[785,10],[961,11]]},"43":{"position":[[1,11]]},"44":{"position":[[48,10]]},"45":{"position":[[1638,12]]},"46":{"position":[[1,10],[125,11]]},"47":{"position":[[197,10],[957,10],[1122,10]]},"48":{"position":[[10,10]]},"51":{"position":[[63,12]]},"52":{"position":[[22,11]]},"54":{"position":[[269,12],[317,11]]},"59":{"position":[[1675,10]]},"60":{"position":[[790,11]]},"61":{"position":[[463,11],[1414,11],[1587,12]]},"62":{"position":[[27,11],[88,11],[376,12]]},"64":{"position":[[91,12]]},"65":{"position":[[297,11]]},"66":{"position":[[183,12]]},"69":{"position":[[151,11],[362,11]]},"71":{"position":[[62,10],[166,11],[178,11],[452,11]]},"73":{"position":[[1012,11],[1085,10],[1257,10]]},"74":{"position":[[788,10]]},"75":{"position":[[131,11],[334,12]]},"76":{"position":[[13,11]]}},"keywords":{}}],["permission.hasreason(denialreason.noadmin",{"_index":551,"title":{},"content":{"44":{"position":[[149,42]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.noadmin",{"_index":276,"title":{},"content":{"24":{"position":[[1668,54]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.twofa",{"_index":278,"title":{},"content":{"24":{"position":[[1800,52]]}},"keywords":{}}],["permission.isallow",{"_index":274,"title":{},"content":{"24":{"position":[[1572,22]]},"71":{"position":[[509,22]]}},"keywords":{}}],["permission.reason",{"_index":820,"title":{},"content":{"71":{"position":[[637,18],[780,18]]}},"keywords":{}}],["permission={permissionsstore.administration.administrationact",{"_index":567,"title":{},"content":{"45":{"position":[[1140,66]]},"69":{"position":[[896,66]]}},"keywords":{}}],["permissiondenialreason",{"_index":371,"title":{},"content":{"30":{"position":[[1813,23]]},"31":{"position":[[296,22]]},"37":{"position":[[193,22]]},"43":{"position":[[279,22]]},"69":{"position":[[634,23]]},"71":{"position":[[105,22]]}},"keywords":{}}],["permissiondenialreason.exceedreadingcount",{"_index":906,"title":{},"content":{"75":{"position":[[1080,42]]}},"keywords":{}}],["permissiondenialreason.missingdata",{"_index":739,"title":{},"content":{"62":{"position":[[209,35],[257,34]]}},"keywords":{}}],["permissiondenialreason.missinguserag",{"_index":824,"title":{},"content":{"71":{"position":[[803,38]]}},"keywords":{}}],["permissiondenialreason.noadmin",{"_index":802,"title":{},"content":{"69":{"position":[[979,33]]}},"keywords":{}}],["permissiondenialreason.nopayaccount",{"_index":821,"title":{},"content":{"71":{"position":[[660,36]]},"73":{"position":[[4084,36],[4349,36]]},"75":{"position":[[845,36]]},"76":{"position":[[1268,36]]}},"keywords":{}}],["permissionguard",{"_index":798,"title":{},"content":{"69":{"position":[[710,15],[733,24]]},"71":{"position":[[431,15]]}},"keywords":{}}],["permissionrouteguard",{"_index":785,"title":{},"content":{"68":{"position":[[221,21],[244,20]]},"70":{"position":[[3,20]]}},"keywords":{}}],["permissions.books.addingtoshelf",{"_index":896,"title":{},"content":{"75":{"position":[[43,32]]}},"keywords":{}}],["permissionsdenialreason",{"_index":441,"title":{},"content":{"31":{"position":[[957,23]]}},"keywords":{}}],["permissionsgateway",{"_index":573,"title":{},"content":{"45":{"position":[[1379,18]]}},"keywords":{}}],["permissionspolici",{"_index":350,"title":{},"content":{"30":{"position":[[748,18]]},"54":{"position":[[1359,18],[2211,18]]},"58":{"position":[[377,18]]},"61":{"position":[[644,18]]},"73":{"position":[[74,18]]}},"keywords":{}}],["permissionspolicymanagerstor",{"_index":649,"title":{},"content":{"54":{"position":[[1406,30],[2258,30]]},"61":{"position":[[691,30]]}},"keywords":{}}],["permissionsstatu",{"_index":693,"title":{},"content":{"60":{"position":[[189,17]]}},"keywords":{}}],["permissionsstatus.error",{"_index":705,"title":{},"content":{"60":{"position":[[555,26]]}},"keywords":{}}],["permissionsstor",{"_index":267,"title":{"38":{"position":[[38,17]]}},"content":{"24":{"position":[[1274,17]]},"30":{"position":[[1837,17],[1855,17],[2044,17],[2945,17]]},"34":{"position":[[106,17]]},"38":{"position":[[1,16],[852,16],[1703,16],[1726,17],[1872,17]]},"45":{"position":[[993,16],[1651,17]]},"51":{"position":[[102,17]]},"52":{"position":[[73,17]]},"59":{"position":[[1,16],[363,16]]},"61":{"position":[[425,17],[1600,17]]},"69":{"position":[[658,16]]},"75":{"position":[[347,17]]},"76":{"position":[[403,17]]}},"keywords":{}}],["permissionsstore.preparedata",{"_index":670,"title":{"59":{"position":[[0,28]]},"61":{"position":[[12,29]]}},"content":{"60":{"position":[[1,28],[268,31],[591,29]]}},"keywords":{}}],["permissionsstore.preparingdatastatu",{"_index":694,"title":{},"content":{"60":{"position":[[209,37]]}},"keywords":{}}],["permissionsstore.t",{"_index":463,"title":{},"content":{"34":{"position":[[286,19]]},"51":{"position":[[261,19]]}},"keywords":{}}],["permissionsstoremock",{"_index":923,"title":{},"content":{"76":{"position":[[380,22],[675,20],[733,20],[1078,20],[1162,20]]}},"keywords":{}}],["permissionsstoreзапрашива",{"_index":715,"title":{},"content":{"61":{"position":[[274,29]]}},"keywords":{}}],["permissionstor",{"_index":466,"title":{},"content":{"34":{"position":[[400,16]]},"38":{"position":[[158,16]]}},"keywords":{}}],["permissionsвозможн",{"_index":505,"title":{},"content":{"38":{"position":[[2134,22]]}},"keywords":{}}],["placehold",{"_index":796,"title":{},"content":{"69":{"position":[[587,11],[1379,12]]},"71":{"position":[[10,11]]}},"keywords":{}}],["polici",{"_index":129,"title":{"8":{"position":[[0,9]]},"33":{"position":[[0,9]]},"39":{"position":[[31,9]]},"57":{"position":[[7,6]]},"59":{"position":[[56,7]]},"73":{"position":[[18,6]]}},"content":{"24":{"position":[[237,7],[245,7]]},"30":{"position":[[654,6],[740,7]]},"31":{"position":[[74,9]]},"34":{"position":[[37,9],[136,9],[361,8]]},"36":{"position":[[85,8],[151,8]]},"37":{"position":[[351,6],[446,7],[454,7]]},"38":{"position":[[684,13],[784,13],[2251,8]]},"39":{"position":[[1,8],[134,8],[239,8]]},"43":{"position":[[37,6],[437,6],[532,7],[540,7]]},"51":{"position":[[132,9]]},"54":{"position":[[1351,7],[2203,7]]},"57":{"position":[[8,6]]},"58":{"position":[[124,6],[283,6],[369,7],[699,6]]},"59":{"position":[[93,7],[1284,6],[1401,6],[1652,6]]},"61":{"position":[[636,7]]},"73":{"position":[[8,7],[66,7],[1039,7]]}},"keywords":{}}],["policy.createpermiss",{"_index":542,"title":{},"content":{"43":{"position":[[61,24]]}},"keywords":{}}],["policymanag",{"_index":231,"title":{},"content":{"24":{"position":[[283,14]]},"30":{"position":[[780,14]]},"37":{"position":[[492,14]]},"38":{"position":[[888,14],[1148,13]]},"43":{"position":[[578,14]]},"45":{"position":[[281,14]]},"54":{"position":[[1391,14],[2243,14]]},"58":{"position":[[409,14],[718,13]]},"59":{"position":[[399,14],[659,13]]},"61":{"position":[[676,14]]},"73":{"position":[[106,14],[3067,13],[3533,14]]}},"keywords":{}}],["policymanager.createpolici",{"_index":353,"title":{},"content":{"30":{"position":[[975,28]]},"37":{"position":[[627,26]]},"54":{"position":[[1548,28],[2449,28]]},"58":{"position":[[604,28]]},"61":{"position":[[833,28]]},"73":{"position":[[301,28]]}},"keywords":{}}],["policymanager.preparedata",{"_index":674,"title":{},"content":{"59":{"position":[[1332,25]]}},"keywords":{}}],["policymanager.preparedataasync",{"_index":868,"title":{},"content":{"73":{"position":[[3588,33]]}},"keywords":{}}],["policymanagerstor",{"_index":232,"title":{},"content":{"24":{"position":[[298,19]]},"30":{"position":[[634,19],[795,19]]},"37":{"position":[[331,19],[507,19]]},"38":{"position":[[472,18],[903,19]]},"43":{"position":[[417,19],[593,19]]},"45":{"position":[[296,19]]},"58":{"position":[[263,19],[424,19]]},"59":{"position":[[196,18],[414,19],[1220,19],[1240,18]]},"73":{"position":[[121,19],[2796,18]]}},"keywords":{}}],["pr",{"_index":11,"title":{},"content":{"0":{"position":[[125,2]]}},"keywords":{}}],["preparedata",{"_index":244,"title":{},"content":{"24":{"position":[[525,12]]},"30":{"position":[[1019,12]]},"37":{"position":[[886,12]]},"38":{"position":[[1530,11]]},"43":{"position":[[782,12]]},"45":{"position":[[471,12]]},"54":{"position":[[1594,12],[2493,12]]},"58":{"position":[[651,11],[732,12]]},"59":{"position":[[37,12],[1041,11],[1381,11]]},"61":{"position":[[189,12],[879,12]]},"73":{"position":[[345,12],[2782,12],[2846,11],[3865,12]]}},"keywords":{}}],["preparedataasync",{"_index":855,"title":{},"content":{"73":{"position":[[2860,17]]}},"keywords":{}}],["preparedataи",{"_index":672,"title":{},"content":{"59":{"position":[[1308,12]]}},"keywords":{}}],["preparingdatastatu",{"_index":499,"title":{},"content":{"38":{"position":[[1602,21]]},"59":{"position":[[1113,21]]}},"keywords":{}}],["privat",{"_index":228,"title":{},"content":{"24":{"position":[[220,7],[266,7],[318,7],[361,7],[1244,7],[1292,7],[1330,7],[1370,7]]},"30":{"position":[[723,7],[815,7],[864,7],[1981,7],[2014,7],[2062,7]]},"37":{"position":[[429,7],[475,7],[527,7]]},"38":{"position":[[871,7]]},"43":{"position":[[515,7],[561,7],[613,7]]},"45":{"position":[[264,7],[316,7]]},"54":{"position":[[1334,7],[1437,7],[2186,7],[2289,7],[2338,7]]},"58":{"position":[[352,7],[444,7],[493,7]]},"59":{"position":[[382,7]]},"61":{"position":[[619,7],[722,7],[1537,7],[1570,7],[1618,7],[1658,7],[1758,7]]},"73":{"position":[[49,7],[141,7],[190,7]]},"75":{"position":[[317,7],[365,7]]}},"keywords":{}}],["promise<void>",{"_index":246,"title":{},"content":{"24":{"position":[[548,19]]},"37":{"position":[[909,19]]},"43":{"position":[[805,19]]},"45":{"position":[[494,19]]}},"keywords":{}}],["promise.al",{"_index":355,"title":{},"content":{"30":{"position":[[1055,13]]},"54":{"position":[[2529,13]]},"58":{"position":[[768,13]]},"73":{"position":[[381,13]]}},"keywords":{}}],["promise.all([this.userrepo.getrolesquery().async",{"_index":249,"title":{},"content":{"24":{"position":[[582,53]]},"37":{"position":[[943,53]]},"43":{"position":[[839,53]]},"45":{"position":[[528,53]]}},"keywords":{}}],["promise.all([userrepo.getpersoninfoquery().async",{"_index":651,"title":{},"content":{"54":{"position":[[1630,53]]},"61":{"position":[[915,53]]}},"keywords":{}}],["prop",{"_index":396,"title":{},"content":{"30":{"position":[[3025,5],[3092,6]]},"69":{"position":[[763,5],[852,6]]},"71":{"position":[[156,5],[491,6]]}},"keywords":{}}],["public",{"_index":250,"title":{},"content":{"24":{"position":[[688,6],[1459,6]]},"30":{"position":[[1214,6],[1935,6],[2158,6],[2733,6],[2801,6]]},"38":{"position":[[923,6],[982,6],[1523,6],[1591,6],[1944,6]]},"43":{"position":[[945,6]]},"45":{"position":[[634,6],[1723,6]]},"47":{"position":[[270,6],[485,6],[703,6],[1254,6]]},"48":{"position":[[297,6],[340,6],[375,6],[408,6],[465,6],[501,6]]},"49":{"position":[[77,6],[146,6]]},"54":{"position":[[1729,6],[2731,6]]},"58":{"position":[[971,6]]},"59":{"position":[[434,6],[493,6],[1034,6],[1102,6]]},"61":{"position":[[1014,6],[1491,6],[1843,6],[2265,6],[2333,6]]},"73":{"position":[[540,6],[1406,6],[4468,6]]},"75":{"position":[[267,6],[437,6],[1434,6],[1510,6]]}},"keywords":{}}],["quot;базовый"",{"_index":533,"title":{},"content":{"42":{"position":[[727,19]]}},"keywords":{}}],["quot;добав",{"_index":314,"title":{},"content":{"28":{"position":[[20,14]]},"30":{"position":[[225,14]]}},"keywords":{}}],["quot;достигнут",{"_index":340,"title":{},"content":{"30":{"position":[[402,16]]}},"keywords":{}}],["quot;доступ",{"_index":604,"title":{},"content":{"48":{"position":[[48,12]]}},"keywords":{}}],["quot;ознакомл",{"_index":536,"title":{},"content":{"42":{"position":[[903,16]]}},"keywords":{}}],["quot;отправить"",{"_index":534,"title":{},"content":{"42":{"position":[[853,21]]}},"keywords":{}}],["quot;размазыванию"",{"_index":95,"title":{},"content":{"4":{"position":[[499,24]]}},"keywords":{}}],["quot;редактирова",{"_index":527,"title":{},"content":{"42":{"position":[[224,19]]}},"keywords":{}}],["quot;созда",{"_index":75,"title":{},"content":{"4":{"position":[[85,13]]},"5":{"position":[[83,13]]},"42":{"position":[[8,13],[509,13],[670,13]]},"45":{"position":[[20,13]]},"47":{"position":[[8,13]]}},"keywords":{}}],["quot;удал",{"_index":317,"title":{},"content":{"28":{"position":[[107,13]]}},"keywords":{}}],["rbac",{"_index":30,"title":{"3":{"position":[[44,5]]},"4":{"position":[[9,4]]}},"content":{"3":{"position":[[104,4],[291,4]]}},"keywords":{}}],["react",{"_index":563,"title":{},"content":{"45":{"position":[[971,5]]},"69":{"position":[[513,8],[553,5]]}},"keywords":{}}],["reactnod",{"_index":794,"title":{},"content":{"69":{"position":[[496,9],[783,10]]},"71":{"position":[[328,10]]}},"keywords":{}}],["reactnode>",{"_index":817,"title":{},"content":{"71":{"position":[[303,14]]}},"keywords":{}}],["read",{"_index":146,"title":{},"content":{"15":{"position":[[16,7]]}},"keywords":{}}],["reading.tsx",{"_index":757,"title":{},"content":{"66":{"position":[[152,11]]}},"keywords":{}}],["readingbook",{"_index":474,"title":{},"content":{"36":{"position":[[342,11]]},"48":{"position":[[386,13]]}},"keywords":{}}],["readingbookpag",{"_index":771,"title":{},"content":{"66":{"position":[[913,15],[1192,16]]}},"keywords":{}}],["readingbookrouteguard",{"_index":744,"title":{},"content":{"64":{"position":[[187,22]]},"66":{"position":[[279,22],[846,21]]}},"keywords":{}}],["readingbookscreen",{"_index":768,"title":{},"content":{"66":{"position":[[741,17]]}},"keywords":{}}],["readingbookдоступ",{"_index":612,"title":{},"content":{"48":{"position":[[211,17]]}},"keywords":{}}],["readonli",{"_index":229,"title":{},"content":{"24":{"position":[[228,8],[274,8],[326,8],[369,8],[1252,8],[1300,8],[1338,8],[1378,8]]},"30":{"position":[[731,8],[823,8],[872,8],[1989,8],[2022,8],[2070,8]]},"37":{"position":[[437,8],[483,8],[535,8]]},"38":{"position":[[879,8],[930,8],[989,8],[1850,8]]},"43":{"position":[[523,8],[569,8],[621,8]]},"45":{"position":[[272,8],[324,8],[1629,8]]},"54":{"position":[[1342,8],[1445,8],[2194,8],[2297,8],[2346,8]]},"58":{"position":[[360,8],[452,8],[501,8]]},"59":{"position":[[390,8],[441,8],[500,8]]},"61":{"position":[[627,8],[730,8],[1545,8],[1578,8],[1626,8],[1666,8]]},"73":{"position":[[57,8],[149,8],[198,8]]},"75":{"position":[[325,8],[373,8]]}},"keywords":{}}],["reason",{"_index":131,"title":{"9":{"position":[[0,8]]},"29":{"position":[[0,8]]},"31":{"position":[[4,7]]}},"content":{"31":{"position":[[89,7],[215,7],[811,8],[863,7]]},"32":{"position":[[13,6],[106,7]]},"44":{"position":[[117,8],[206,8]]},"62":{"position":[[137,7],[201,7],[250,6]]},"73":{"position":[[3968,7],[4063,6]]}},"keywords":{}}],["reasonзначен",{"_index":452,"title":{},"content":{"32":{"position":[[91,14]]}},"keywords":{}}],["reasonпоследн",{"_index":887,"title":{},"content":{"74":{"position":[[158,15]]}},"keywords":{}}],["record<str",{"_index":816,"title":{},"content":{"71":{"position":[[285,17]]}},"keywords":{}}],["renderrout",{"_index":691,"title":{},"content":{"60":{"position":[[149,12]]}},"keywords":{}}],["return",{"_index":252,"title":{},"content":{"24":{"position":[[725,6],[994,6],[1090,6],[1655,7],[1787,7],[1967,7]]},"30":{"position":[[1243,6],[1352,6],[1462,6],[1601,6],[2311,7],[2432,7],[2622,7],[3205,6]]},"38":{"position":[[1626,6],[1981,6]]},"43":{"position":[[982,6],[1111,6]]},"45":{"position":[[671,6],[787,6],[1092,6],[1760,6],[1998,6]]},"47":{"position":[[307,6],[423,6],[525,6],[641,6],[738,6],[854,6],[1291,6],[1407,6]]},"54":{"position":[[800,6],[872,6],[1004,6],[1973,6],[2791,6],[2991,6],[3119,6]]},"58":{"position":[[1000,6],[1109,6],[1219,6],[1358,6]]},"59":{"position":[[1137,6]]},"60":{"position":[[360,6]]},"61":{"position":[[1258,6],[1788,6],[2040,7],[2165,7]]},"66":{"position":[[554,6],[987,6],[1057,6]]},"69":{"position":[[867,6],[1628,6]]},"71":{"position":[[534,6],[592,6],[699,6],[844,6],[934,6]]},"73":{"position":[[569,6],[678,6],[788,6],[927,6],[1435,6],[1582,6],[1742,6],[1944,6],[3622,6],[4497,6],[4606,6],[4716,6],[4855,6]]},"74":{"position":[[368,6],[440,6],[584,6]]},"75":{"position":[[686,7],[915,7],[1210,7]]},"76":{"position":[[551,6]]}},"keywords":{}}],["role",{"_index":40,"title":{},"content":{"3":{"position":[[109,5]]},"55":{"position":[[107,6],[298,6]]}},"keywords":{}}],["rout",{"_index":141,"title":{"14":{"position":[[0,5]]},"15":{"position":[[14,5]]},"63":{"position":[[0,5]]},"68":{"position":[[9,5]]}},"content":{"64":{"position":[[5,5]]},"65":{"position":[[1,5],[103,5]]},"67":{"position":[[15,5],[125,5]]},"68":{"position":[[63,5],[176,5],[307,5]]}},"keywords":{}}],["routeguards)взаимодейств",{"_index":207,"title":{},"content":{"21":{"position":[[294,27]]}},"keywords":{}}],["router",{"_index":270,"title":{},"content":{"24":{"position":[[1387,7],[1395,7]]}},"keywords":{}}],["routesguard",{"_index":742,"title":{},"content":{"64":{"position":[[132,13]]},"66":{"position":[[224,13]]}},"keywords":{}}],["rule",{"_index":133,"title":{"10":{"position":[[0,6]]},"11":{"position":[[14,6]]},"50":{"position":[[0,6]]},"52":{"position":[[0,5]]},"53":{"position":[[11,6]]},"74":{"position":[[13,6]]}},"content":{"39":{"position":[[305,6]]},"51":{"position":[[36,6],[154,6]]},"52":{"position":[[1,5]]},"53":{"position":[[1,5]]},"54":{"position":[[423,5],[1285,14],[2139,14]]},"55":{"position":[[5,5]]},"61":{"position":[[570,14]]},"74":{"position":[[18,5]]}},"keywords":{}}],["runtim",{"_index":118,"title":{},"content":{"5":{"position":[[329,7]]}},"keywords":{}}],["setup",{"_index":848,"title":{},"content":{"73":{"position":[[2298,7],[2925,5],[3759,7],[4203,7],[5188,7]]},"76":{"position":[[372,5]]}},"keywords":{}}],["setup(permissionsstoremock",{"_index":929,"title":{},"content":{"76":{"position":[[872,28],[1331,28]]}},"keywords":{}}],["share",{"_index":347,"title":{},"content":{"30":{"position":[[618,6]]},"37":{"position":[[315,6]]},"38":{"position":[[451,6]]},"43":{"position":[[401,6]]},"54":{"position":[[598,6]]},"58":{"position":[[247,6]]},"59":{"position":[[175,6]]}},"keywords":{}}],["shelf",{"_index":878,"title":{},"content":{"73":{"position":[[5289,6]]}},"keywords":{}}],["showcreationdocbutton",{"_index":592,"title":{},"content":{"47":{"position":[[208,22],[281,23]]}},"keywords":{}}],["showeditingdocmod",{"_index":594,"title":{},"content":{"47":{"position":[[714,21]]}},"keywords":{}}],["sidebar",{"_index":556,"title":{},"content":{"45":{"position":[[48,7],[1062,7],[1907,7]]}},"keywords":{}}],["singleton",{"_index":483,"title":{},"content":{"38":{"position":[[24,9],[1680,9]]}},"keywords":{}}],["store",{"_index":460,"title":{},"content":{"34":{"position":[[88,7]]},"51":{"position":[[84,7]]}},"keywords":{}}],["string",{"_index":376,"title":{},"content":{"30":{"position":[[2006,7],[2911,7],[3039,7]]},"32":{"position":[[126,6]]},"44":{"position":[[126,7],[215,7]]},"49":{"position":[[111,7],[181,7]]},"54":{"position":[[729,7]]},"55":{"position":[[114,7],[217,8],[241,7],[305,7],[369,8],[393,7]]},"61":{"position":[[1562,7]]},"74":{"position":[[297,7]]},"75":{"position":[[466,7]]}},"keywords":{}}],["sut",{"_index":847,"title":{},"content":{"73":{"position":[[2284,3],[3505,3],[3631,3],[3745,3],[4189,3],[5174,3]]},"76":{"position":[[476,3],[572,3],[1323,3]]}},"keywords":{}}],["sut.addtoshelf('id",{"_index":927,"title":{},"content":{"76":{"position":[[529,21]]}},"keywords":{}}],["systemdenialreason",{"_index":429,"title":{},"content":{"31":{"position":[[585,18],[842,18],[896,18]]}},"keywords":{}}],["systemdenialreason.internalerror",{"_index":442,"title":{},"content":{"31":{"position":[[1048,33]]}},"keywords":{}}],["systemdenialreason.missingdata",{"_index":443,"title":{},"content":{"31":{"position":[[1153,31]]}},"keywords":{}}],["theme={theme}>",{"_index":698,"title":{},"content":{"60":{"position":[[387,17]]}},"keywords":{}}],["this.administr",{"_index":495,"title":{},"content":{"38":{"position":[[1293,19]]},"59":{"position":[[804,19]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().async",{"_index":357,"title":{},"content":{"30":{"position":[[1108,47]]},"54":{"position":[[2626,47]]},"58":{"position":[[865,47]]},"73":{"position":[[434,47]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().data",{"_index":659,"title":{},"content":{"54":{"position":[[3048,44]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery()?.data",{"_index":361,"title":{},"content":{"30":{"position":[[1390,45]]},"58":{"position":[[1147,45]]},"73":{"position":[[716,45],[1620,45],[4644,45]]}},"keywords":{}}],["this.book",{"_index":496,"title":{},"content":{"38":{"position":[[1381,10]]},"59":{"position":[[892,10]]}},"keywords":{}}],["this.bookid",{"_index":380,"title":{},"content":{"30":{"position":[[2274,14]]}},"keywords":{}}],["this.booksrepo.getbookbyidquery(this.bookid",{"_index":725,"title":{},"content":{"61":{"position":[[1795,45]]}},"keywords":{}}],["this.isopenaccountpay",{"_index":909,"title":{},"content":{"75":{"position":[[1473,25],[1550,25]]}},"keywords":{}}],["this.isopenpayaccount",{"_index":389,"title":{},"content":{"30":{"position":[[2768,21],[2837,21]]},"61":{"position":[[2300,21],[2369,21]]}},"keywords":{}}],["this.notifyservice.error",{"_index":277,"title":{},"content":{"24":{"position":[[1725,25],[1918,25],[1977,25]]},"30":{"position":[[2541,25],[2632,25]]},"61":{"position":[[2175,25]]},"75":{"position":[[1129,25],[1333,25]]}},"keywords":{}}],["this.notifyservice.error('вы",{"_index":732,"title":{},"content":{"61":{"position":[[2118,28]]}},"keywords":{}}],["this.notifyservice.info(`книг",{"_index":379,"title":{},"content":{"30":{"position":[[2243,30]]},"75":{"position":[[623,30]]}},"keywords":{}}],["this.notifyservice.success(`книг",{"_index":730,"title":{},"content":{"61":{"position":[[1984,33]]}},"keywords":{}}],["this.openpaymentaccount",{"_index":383,"title":{},"content":{"30":{"position":[[2405,26]]},"75":{"position":[[888,26]]}},"keywords":{}}],["this.permissions.administration.administrationact",{"_index":273,"title":{},"content":{"24":{"position":[[1514,54]]}},"keywords":{}}],["this.permissions.administration.administrationactions.isallow",{"_index":503,"title":{},"content":{"38":{"position":[[1988,64]]},"45":{"position":[[1767,64]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason",{"_index":904,"title":{},"content":{"75":{"position":[[797,47],[1032,47]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.exceedreadingcount",{"_index":384,"title":{},"content":{"30":{"position":[[2447,89]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.nopay",{"_index":382,"title":{},"content":{"30":{"position":[[2324,78]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.isallow",{"_index":378,"title":{},"content":{"30":{"position":[[2192,48]]},"75":{"position":[[572,48]]}},"keywords":{}}],["this.permissions.calcpayment(this.bookbyidquery.acceptableag",{"_index":728,"title":{},"content":{"61":{"position":[[1889,63]]}},"keywords":{}}],["this.polici",{"_index":240,"title":{},"content":{"24":{"position":[[453,11]]},"30":{"position":[[961,11]]},"37":{"position":[[724,11]]},"43":{"position":[[710,11]]},"54":{"position":[[1534,11],[2435,11]]},"58":{"position":[[590,11]]},"61":{"position":[[819,11]]},"73":{"position":[[287,11]]}},"keywords":{}}],["this.policy.createpermission((allow",{"_index":253,"title":{},"content":{"24":{"position":[[732,36]]},"30":{"position":[[1250,36]]},"43":{"position":[[989,36]]},"54":{"position":[[1780,36],[2798,36]]},"58":{"position":[[1007,36]]},"61":{"position":[[1065,36]]},"73":{"position":[[576,36],[1442,36],[4504,36]]}},"keywords":{}}],["this.policymanag",{"_index":494,"title":{},"content":{"38":{"position":[[1244,18],[1348,19],[1418,19]]},"59":{"position":[[755,18],[859,19],[929,19]]}},"keywords":{}}],["this.policymanager.createpermission((allow",{"_index":558,"title":{},"content":{"45":{"position":[[678,43]]},"47":{"position":[[314,43],[532,43],[745,43],[1298,43]]}},"keywords":{}}],["this.policymanager.createpolici",{"_index":241,"title":{},"content":{"24":{"position":[[467,33]]},"37":{"position":[[738,33]]},"43":{"position":[[724,33]]},"45":{"position":[[413,33]]}},"keywords":{}}],["this.policymanager.preparedatasync",{"_index":498,"title":{},"content":{"38":{"position":[[1553,37]]},"59":{"position":[[1064,37]]}},"keywords":{}}],["this.policymanager.preparingdatastatu",{"_index":500,"title":{},"content":{"38":{"position":[[1633,39]]},"59":{"position":[[1144,39]]}},"keywords":{}}],["this.router.push(app_routes.createdoc.getredirectpath",{"_index":275,"title":{},"content":{"24":{"position":[[1597,57]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().async",{"_index":657,"title":{},"content":{"54":{"position":[[2582,43]]},"58":{"position":[[821,43]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().data?.birthday",{"_index":653,"title":{},"content":{"54":{"position":[[1887,50],[2905,50]]},"61":{"position":[[1172,50]]}},"keywords":{}}],["this.userrepo.getrolesquery().async",{"_index":356,"title":{},"content":{"30":{"position":[[1069,38]]},"54":{"position":[[2543,38]]},"58":{"position":[[782,38]]},"73":{"position":[[395,38]]}},"keywords":{}}],["this.userrepo.getrolesquery().data?.isadmin",{"_index":263,"title":{},"content":{"24":{"position":[[1042,45]]},"30":{"position":[[1304,45]]},"43":{"position":[[1043,45]]},"45":{"position":[[739,45]]},"47":{"position":[[375,45],[593,45],[806,45],[1359,45]]},"58":{"position":[[1061,45]]},"73":{"position":[[630,45],[1534,45],[4558,45]]}},"keywords":{}}],["titl",{"_index":805,"title":{},"content":{"69":{"position":[[1040,6]]}},"keywords":{}}],["title="доступн",{"_index":809,"title":{},"content":{"69":{"position":[[1113,20]]}},"keywords":{}}],["title="книг",{"_index":773,"title":{},"content":{"66":{"position":[[1013,17]]}},"keywords":{}}],["title="необходим",{"_index":822,"title":{},"content":{"71":{"position":[[722,22],[867,22]]}},"keywords":{}}],["title="нет",{"_index":829,"title":{},"content":{"71":{"position":[[957,15]]}},"keywords":{}}],["to={app_routes.createbook.getredirectpath()}>",{"_index":569,"title":{},"content":{"45":{"position":[[1230,48],[2094,48]]}},"keywords":{}}],["toggl",{"_index":149,"title":{"16":{"position":[[8,6]]},"17":{"position":[[39,7]]}},"content":{"17":{"position":[[40,6],[81,6],[116,8],[153,6]]},"41":{"position":[[292,6]]},"42":{"position":[[597,7]]}},"keywords":{}}],["true",{"_index":239,"title":{},"content":{"24":{"position":[[444,4],[1448,4]]},"30":{"position":[[952,4],[2147,4],[2792,5]]},"37":{"position":[[615,4]]},"38":{"position":[[1136,4],[1933,4]]},"43":{"position":[[701,4]]},"45":{"position":[[404,4],[1712,4]]},"54":{"position":[[1525,4],[2426,4]]},"58":{"position":[[581,4]]},"59":{"position":[[647,4]]},"61":{"position":[[810,4],[1747,4],[2324,5]]},"73":{"position":[[278,4],[2315,4],[3776,4],[5233,5]]},"75":{"position":[[1501,5]]}},"keywords":{}}],["two",{"_index":217,"title":{"23":{"position":[[4,4]]}},"content":{},"keywords":{}}],["twofa",{"_index":235,"title":{},"content":{"24":{"position":[[378,6],[791,5],[1309,6]]}},"keywords":{}}],["twofa.ispass",{"_index":261,"title":{},"content":{"24":{"position":[[974,17]]}},"keywords":{}}],["twofaservic",{"_index":236,"title":{},"content":{"24":{"position":[[385,13],[1316,13]]}},"keywords":{}}],["type",{"_index":395,"title":{},"content":{"30":{"position":[[3020,4]]},"37":{"position":[[138,4]]},"38":{"position":[[313,4],[465,4],[705,4]]},"43":{"position":[[224,4]]},"44":{"position":[[43,4]]},"59":{"position":[[189,4]]},"62":{"position":[[146,4]]},"69":{"position":[[489,4],[758,4]]},"71":{"position":[[55,4],[151,4]]}},"keywords":{}}],["ui",{"_index":56,"title":{"46":{"position":[[33,3]]}},"content":{"3":{"position":[[364,3],[570,3]]},"45":{"position":[[1435,2]]},"46":{"position":[[55,3],[95,2]]},"47":{"position":[[970,2]]}},"keywords":{}}],["uistor",{"_index":136,"title":{"12":{"position":[[28,8]]},"75":{"position":[[13,8]]}},"content":{"24":{"position":[[1221,7]]},"30":{"position":[[1925,7]]},"38":{"position":[[1820,7]]},"45":{"position":[[1524,8],[1599,7]]},"61":{"position":[[1481,7]]},"75":{"position":[[24,7],[161,7],[257,7]]}},"keywords":{}}],["uistore(bookid",{"_index":393,"title":{},"content":{"30":{"position":[[2929,15]]}},"keywords":{}}],["uistore(permissionsstoremock",{"_index":926,"title":{},"content":{"76":{"position":[[486,29]]}},"keywords":{}}],["useeffect",{"_index":695,"title":{},"content":{"60":{"position":[[247,12]]}},"keywords":{}}],["userbirthday",{"_index":639,"title":{},"content":{"54":{"position":[[714,14],[854,15]]},"55":{"position":[[226,14],[378,14]]},"74":{"position":[[282,14],[422,15]]}},"keywords":{}}],["userouterparam",{"_index":769,"title":{},"content":{"66":{"position":[[795,15],[957,18]]}},"keywords":{}}],["useroutes(rout",{"_index":692,"title":{},"content":{"60":{"position":[[164,18]]}},"keywords":{}}],["userrepo",{"_index":233,"title":{},"content":{"24":{"position":[[335,9]]},"30":{"position":[[881,9]]},"37":{"position":[[544,9]]},"38":{"position":[[1067,9],[1368,9],[1451,9]]},"43":{"position":[[630,9]]},"45":{"position":[[333,9]]},"54":{"position":[[1454,9],[2355,9]]},"58":{"position":[[510,9]]},"59":{"position":[[578,9],[879,9],[962,9]]},"61":{"position":[[739,9]]},"73":{"position":[[207,9]]}},"keywords":{}}],["userrepomock",{"_index":859,"title":{},"content":{"73":{"position":[[3160,12],[3565,13]]}},"keywords":{}}],["userrepositori",{"_index":234,"title":{},"content":{"24":{"position":[[345,15]]},"30":{"position":[[891,15]]},"37":{"position":[[145,14],[554,15]]},"38":{"position":[[267,14],[339,14],[1077,15],[1763,15]]},"43":{"position":[[231,14],[640,15]]},"45":{"position":[[343,15]]},"54":{"position":[[1464,15],[2365,15]]},"58":{"position":[[74,14],[520,15]]},"59":{"position":[[588,15]]},"61":{"position":[[749,15]]},"73":{"position":[[217,15]]}},"keywords":{}}],["usest",{"_index":400,"title":{},"content":{"30":{"position":[[3167,11]]}},"keywords":{}}],["usestate(createuistor",{"_index":581,"title":{},"content":{"45":{"position":[[1973,24]]}},"keywords":{}}],["ux",{"_index":197,"title":{},"content":{"21":{"position":[[117,2]]}},"keywords":{}}],["valid",{"_index":614,"title":{},"content":{"48":{"position":[[290,5]]},"49":{"position":[[70,5]]},"55":{"position":[[34,5]]}},"keywords":{}}],["vitest",{"_index":918,"title":{},"content":{"76":{"position":[[72,6],[168,7]]}},"keywords":{}}],["xaml",{"_index":26,"title":{"2":{"position":[[19,4]]}},"content":{},"keywords":{}}],["а",{"_index":530,"title":{},"content":{"42":{"position":[[587,1]]}},"keywords":{}}],["абстрактн",{"_index":561,"title":{},"content":{"45":{"position":[[910,11]]},"47":{"position":[[1110,11]]},"68":{"position":[[208,12]]}},"keywords":{}}],["админ",{"_index":444,"title":{},"content":{"31":{"position":[[1216,7]]}},"keywords":{}}],["администратор",{"_index":221,"title":{},"content":{"24":{"position":[[48,14],[670,14],[1768,15]]},"31":{"position":[[339,15]]},"42":{"position":[[53,14]]},"43":{"position":[[927,14]]},"45":{"position":[[103,16],[616,14]]},"47":{"position":[[84,15],[1199,15]]},"48":{"position":[[135,14]]},"69":{"position":[[84,15],[1055,15]]},"73":{"position":[[1516,14],[2242,16],[3703,16]]}},"keywords":{}}],["администраторов"",{"_index":810,"title":{},"content":{"69":{"position":[[1145,21]]}},"keywords":{}}],["админск",{"_index":662,"title":{},"content":{"55":{"position":[[57,9]]}},"keywords":{}}],["аккаунт",{"_index":80,"title":{},"content":{"4":{"position":[[150,9]]},"5":{"position":[[148,9],[264,7]]},"24":{"position":[[2058,9]]},"30":{"position":[[72,7],[191,8]]},"31":{"position":[[389,7]]},"41":{"position":[[136,8]]},"42":{"position":[[303,9],[469,7]]},"73":{"position":[[1697,7],[2029,7],[2399,7],[2623,7],[4004,7],[4143,7],[5078,7]]}},"keywords":{}}],["аккаунт"",{"_index":823,"title":{},"content":{"71":{"position":[[754,13]]}},"keywords":{}}],["аккумулирова",{"_index":875,"title":{},"content":{"73":{"position":[[5007,14]]}},"keywords":{}}],["актив",{"_index":538,"title":{},"content":{"42":{"position":[[944,7]]}},"keywords":{}}],["активн",{"_index":222,"title":{},"content":{"24":{"position":[[65,8]]}},"keywords":{}}],["алгоритм",{"_index":833,"title":{"73":{"position":[[0,8]]}},"content":{},"keywords":{}}],["архитектур",{"_index":14,"title":{},"content":{"1":{"position":[[6,11]]}},"keywords":{}}],["архитектурн",{"_index":577,"title":{},"content":{"45":{"position":[[1457,13]]}},"keywords":{}}],["асинхрон",{"_index":854,"title":{},"content":{"73":{"position":[[2828,11]]}},"keywords":{}}],["астра",{"_index":22,"title":{},"content":{"1":{"position":[[119,6]]}},"keywords":{}}],["аутентификац",{"_index":114,"title":{},"content":{"5":{"position":[[190,15]]}},"keywords":{}}],["базов",{"_index":313,"title":{},"content":{"27":{"position":[[766,7]]}},"keywords":{}}],["баланс",{"_index":680,"title":{},"content":{"59":{"position":[[1556,6]]}},"keywords":{}}],["библиотек",{"_index":917,"title":{},"content":{"76":{"position":[[61,10]]}},"keywords":{}}],["бизнес",{"_index":72,"title":{},"content":{"4":{"position":[[59,6]]},"5":{"position":[[57,6]]},"39":{"position":[[166,6]]},"41":{"position":[[472,6]]}},"keywords":{}}],["блокир",{"_index":585,"title":{},"content":{"46":{"position":[[67,12]]},"59":{"position":[[1930,9]]},"61":{"position":[[125,9]]}},"keywords":{}}],["блокировк",{"_index":290,"title":{},"content":{"26":{"position":[[97,10]]},"41":{"position":[[336,10]]},"61":{"position":[[336,10]]}},"keywords":{}}],["блокировок",{"_index":48,"title":{},"content":{"3":{"position":[[229,10]]}},"keywords":{}}],["большинств",{"_index":293,"title":{},"content":{"27":{"position":[[62,11]]}},"keywords":{}}],["бэкенд",{"_index":29,"title":{"3":{"position":[[36,7]]},"4":{"position":[[17,8]]},"5":{"position":[[17,8]]}},"content":{"5":{"position":[[233,7]]}},"keywords":{}}],["вдохновл",{"_index":24,"title":{"2":{"position":[[0,11]]}},"content":{},"keywords":{}}],["взаимодейств",{"_index":486,"title":{},"content":{"38":{"position":[[133,15]]}},"keywords":{}}],["взрывн",{"_index":586,"title":{},"content":{"46":{"position":[[109,9]]},"47":{"position":[[984,8]]}},"keywords":{}}],["вид",{"_index":449,"title":{},"content":{"32":{"position":[[55,4]]},"44":{"position":[[36,5]]},"45":{"position":[[933,5]]}},"keywords":{}}],["видн",{"_index":84,"title":{},"content":{"4":{"position":[[227,6]]},"47":{"position":[[924,5]]},"65":{"position":[[199,5]]}},"keywords":{}}],["влия",{"_index":717,"title":{},"content":{"61":{"position":[[326,6]]}},"keywords":{}}],["вложен",{"_index":780,"title":{"67":{"position":[[0,9]]}},"content":{"67":{"position":[[86,9],[162,11]]},"69":{"position":[[303,9]]}},"keywords":{}}],["вне",{"_index":628,"title":{},"content":{"52":{"position":[[18,3]]}},"keywords":{}}],["внутр",{"_index":105,"title":{},"content":{"4":{"position":[[658,6]]},"34":{"position":[[435,6]]},"36":{"position":[[78,6]]},"43":{"position":[[30,6]]}},"keywords":{}}],["возвраща",{"_index":546,"title":{},"content":{"44":{"position":[[18,10]]},"62":{"position":[[106,10]]}},"keywords":{}}],["возможн",{"_index":358,"title":{},"content":{"30":{"position":[[1175,11]]},"38":{"position":[[2070,11]]},"41":{"position":[[364,11]]},"54":{"position":[[1699,11],[2693,11]]},"58":{"position":[[932,11]]},"61":{"position":[[984,11]]},"67":{"position":[[138,11]]},"73":{"position":[[501,11]]}},"keywords":{}}],["возникнет",{"_index":296,"title":{},"content":{"27":{"position":[[206,9]]}},"keywords":{}}],["возраст",{"_index":630,"title":{},"content":{"54":{"position":[[47,7],[93,9],[157,7],[203,9],[377,8]]},"55":{"position":[[163,8]]},"74":{"position":[[760,10],[1012,7],[1121,7],[1160,7]]}},"keywords":{}}],["вопрос",{"_index":603,"title":{},"content":{"48":{"position":[[40,7]]}},"keywords":{}}],["времен",{"_index":520,"title":{},"content":{"41":{"position":[[274,9]]}},"keywords":{}}],["врод",{"_index":572,"title":{},"content":{"45":{"position":[[1373,5]]}},"keywords":{}}],["вход",{"_index":719,"title":{},"content":{"61":{"position":[[522,4]]}},"keywords":{}}],["входн",{"_index":484,"title":{},"content":{"38":{"position":[[43,7]]}},"keywords":{}}],["выбра",{"_index":677,"title":{},"content":{"59":{"position":[[1467,6]]}},"keywords":{}}],["вывод",{"_index":790,"title":{},"content":{"69":{"position":[[220,5]]}},"keywords":{}}],["выделя",{"_index":514,"title":{"41":{"position":[[4,8]]}},"content":{},"keywords":{}}],["выз",{"_index":676,"title":{},"content":{"59":{"position":[[1368,5]]},"73":{"position":[[2840,5],[4405,5],[4979,5]]},"74":{"position":[[174,5]]}},"keywords":{}}],["вызва",{"_index":258,"title":{},"content":{"24":{"position":[[916,7]]},"58":{"position":[[669,6]]},"73":{"position":[[3857,7]]}},"keywords":{}}],["вызов",{"_index":673,"title":{},"content":{"59":{"position":[[1325,6]]},"73":{"position":[[1376,7]]}},"keywords":{}}],["вызовет",{"_index":671,"title":{},"content":{"59":{"position":[[58,7]]}},"keywords":{}}],["вызыва",{"_index":682,"title":{"65":{"position":[[6,10]]}},"content":{"59":{"position":[[1632,8],[1847,10]]},"60":{"position":[[41,8]]},"61":{"position":[[42,10]]},"65":{"position":[[20,10]]},"67":{"position":[[116,8]]},"73":{"position":[[2773,8]]}},"keywords":{}}],["выполнен",{"_index":853,"title":{},"content":{"73":{"position":[[2738,10]]}},"keywords":{}}],["выполня",{"_index":600,"title":{},"content":{"47":{"position":[[1558,9]]}},"keywords":{}}],["высок",{"_index":311,"title":{},"content":{"27":{"position":[[673,8]]}},"keywords":{}}],["вычисл",{"_index":661,"title":{},"content":{"55":{"position":[[47,9],[141,9]]}},"keywords":{}}],["вычислен",{"_index":85,"title":{"49":{"position":[[20,10]]}},"content":{"4":{"position":[[242,10]]},"54":{"position":[[1149,10]]},"75":{"position":[[1314,10],[2091,10]]}},"keywords":{}}],["вычисля",{"_index":304,"title":{},"content":{"27":{"position":[[400,9]]},"49":{"position":[[22,9]]}},"keywords":{}}],["готов",{"_index":211,"title":{"22":{"position":[[0,7]]}},"content":{},"keywords":{}}],["группировкапр",{"_index":886,"title":{},"content":{"74":{"position":[[103,14]]}},"keywords":{}}],["дал",{"_index":554,"title":{},"content":{"44":{"position":[[269,6]]},"54":{"position":[[1072,5]]}},"keywords":{}}],["дальн",{"_index":479,"title":{},"content":{"37":{"position":[[691,10]]}},"keywords":{}}],["дан",{"_index":139,"title":{"13":{"position":[[11,7]]},"56":{"position":[[11,6]]},"57":{"position":[[30,6]]},"59":{"position":[[40,6]]},"62":{"position":[[28,7]]}},"content":{"21":{"position":[[236,6]]},"22":{"position":[[112,6]]},"27":{"position":[[92,8],[742,6]]},"28":{"position":[[169,6],[343,6],[480,6]]},"31":{"position":[[708,6],[1101,6]]},"32":{"position":[[83,7]]},"37":{"position":[[820,6]]},"38":{"position":[[1211,6],[1487,6],[2110,6]]},"41":{"position":[[126,6],[228,6]]},"42":{"position":[[125,6],[397,6],[630,6],[824,6]]},"47":{"position":[[104,6]]},"57":{"position":[[43,7]]},"58":{"position":[[64,6],[167,7]]},"59":{"position":[[77,6],[722,6],[998,6],[1204,6],[1459,6],[1523,6],[1618,7],[1711,7],[1879,6]]},"60":{"position":[[779,6]]},"61":{"position":[[74,6],[223,6],[304,6],[527,7],[1340,6]]},"62":{"position":[[77,7]]},"67":{"position":[[180,6]]},"69":{"position":[[1293,6]]},"74":{"position":[[741,6]]}},"keywords":{}}],["дат",{"_index":826,"title":{},"content":{"71":{"position":[[900,4]]},"74":{"position":[[973,4]]}},"keywords":{}}],["дебагингаувеличен",{"_index":507,"title":{},"content":{"38":{"position":[[2184,19]]}},"keywords":{}}],["действ",{"_index":110,"title":{},"content":{"4":{"position":[[808,9]]},"24":{"position":[[660,9]]},"43":{"position":[[917,9]]},"45":{"position":[[606,9]]},"47":{"position":[[1189,9],[1580,9]]},"48":{"position":[[125,9]]}},"keywords":{}}],["декомпозиц",{"_index":418,"title":{},"content":{"31":{"position":[[183,12]]}},"keywords":{}}],["дела",{"_index":789,"title":{},"content":{"69":{"position":[[213,6]]},"76":{"position":[[696,6],[1099,6]]}},"keywords":{}}],["дефолтн",{"_index":814,"title":{"70":{"position":[[10,9]]}},"content":{"70":{"position":[[41,9]]},"71":{"position":[[390,9]]}},"keywords":{}}],["директор",{"_index":459,"title":{},"content":{"34":{"position":[[26,10]]},"51":{"position":[[25,10]]}},"keywords":{}}],["добав",{"_index":92,"title":{},"content":{"4":{"position":[[423,8]]},"5":{"position":[[375,8]]},"24":{"position":[[2003,9]]},"30":{"position":[[35,8],[141,8],[1187,8],[2658,9]]},"42":{"position":[[479,8]]},"58":{"position":[[944,8]]},"73":{"position":[[513,8]]},"75":{"position":[[1359,9]]}},"keywords":{}}],["добавл",{"_index":381,"title":{},"content":{"30":{"position":[[2289,9]]},"75":{"position":[[559,9],[664,9],[1771,11]]},"76":{"position":[[649,11],[950,9]]}},"keywords":{}}],["добавлен",{"_index":4,"title":{},"content":{"0":{"position":[[49,10]]},"30":{"position":[[338,11]]},"42":{"position":[[315,11]]},"73":{"position":[[1846,10],[2482,12],[2571,12]]}},"keywords":{}}],["добавля",{"_index":618,"title":{},"content":{"49":{"position":[[41,11]]}},"keywords":{}}],["документ",{"_index":111,"title":{},"content":{"4":{"position":[[821,11]]},"24":{"position":[[22,9],[2013,8]]},"28":{"position":[[204,10],[489,11]]}},"keywords":{}}],["документ"",{"_index":76,"title":{},"content":{"4":{"position":[[99,14]]},"5":{"position":[[97,14]]},"28":{"position":[[35,14]]},"42":{"position":[[22,14],[244,14],[523,14],[684,14]]},"47":{"position":[[22,14]]}},"keywords":{}}],["документац",{"_index":3,"title":{},"content":{"0":{"position":[[32,12]]},"1":{"position":[[50,13]]},"22":{"position":[[119,13]]}},"keywords":{}}],["долж",{"_index":153,"title":{"46":{"position":[[14,6]]}},"content":{"17":{"position":[[160,6]]},"30":{"position":[[586,6]]},"32":{"position":[[20,6]]},"37":{"position":[[283,6]]},"41":{"position":[[94,6]]},"43":{"position":[[369,6]]},"46":{"position":[[15,6]]},"58":{"position":[[215,6]]},"59":{"position":[[18,6]]},"65":{"position":[[13,6]]},"73":{"position":[[4023,6],[4426,6],[5000,6]]}},"keywords":{}}],["должн",{"_index":18,"title":{},"content":{"1":{"position":[[64,6]]},"27":{"position":[[419,6],[571,6]]},"30":{"position":[[255,6]]},"31":{"position":[[223,6]]},"32":{"position":[[114,6]]},"36":{"position":[[160,6]]},"39":{"position":[[13,6]]},"54":{"position":[[329,6]]},"59":{"position":[[1765,6],[1895,6]]},"61":{"position":[[90,6]]},"65":{"position":[[55,6]]},"69":{"position":[[56,6]]}},"keywords":{}}],["дополнительн",{"_index":58,"title":{},"content":{"3":{"position":[[391,14]]},"4":{"position":[[347,13],[441,14]]},"5":{"position":[[421,14]]},"31":{"position":[[158,14],[486,14]]}},"keywords":{}}],["допустим",{"_index":885,"title":{},"content":{"74":{"position":[[93,9],[1050,13],[1182,13]]}},"keywords":{}}],["доск",{"_index":9,"title":{},"content":{"0":{"position":[[91,5]]}},"keywords":{}}],["достиг",{"_index":336,"title":{},"content":{"30":{"position":[[324,6]]}},"keywords":{}}],["достигнут",{"_index":385,"title":{},"content":{"30":{"position":[[2567,11]]},"73":{"position":[[2536,10]]},"75":{"position":[[1155,11]]}},"keywords":{}}],["достич",{"_index":747,"title":{},"content":{"65":{"position":[[142,7]]}},"keywords":{}}],["доступ",{"_index":44,"title":{"27":{"position":[[28,8]]},"29":{"position":[[26,7]]},"33":{"position":[[19,8]]},"38":{"position":[[0,6]]},"40":{"position":[[13,8]]},"49":{"position":[[31,9]]},"50":{"position":[[32,8]]},"56":{"position":[[22,8]]},"57":{"position":[[47,9]]},"63":{"position":[[14,7]]},"70":{"position":[[36,8]]},"72":{"position":[[22,8]]}},"content":{"3":{"position":[[173,9],[240,8],[432,9],[512,7]]},"4":{"position":[[253,7],[531,8],[798,7]]},"5":{"position":[[412,8]]},"19":{"position":[[46,8],[206,9],[245,8],[323,6]]},"20":{"position":[[81,8]]},"21":{"position":[[46,8],[89,8],[138,10]]},"24":{"position":[[651,6],[826,7]]},"27":{"position":[[10,8],[50,9],[165,7],[410,8],[533,7],[562,8],[599,10],[774,8]]},"28":{"position":[[261,6],[396,6],[617,7]]},"31":{"position":[[624,7],[732,7],[1001,7],[1125,7]]},"37":{"position":[[856,8]]},"38":{"position":[[97,9],[817,7],[1179,7],[1235,8],[1511,8]]},"39":{"position":[[217,9]]},"41":{"position":[[385,7]]},"42":{"position":[[147,6],[419,6]]},"43":{"position":[[908,6],[1104,6],[1142,6]]},"44":{"position":[[106,7]]},"45":{"position":[[597,6],[895,8],[1415,8],[1494,8]]},"47":{"position":[[1009,9],[1020,6],[1180,6]]},"48":{"position":[[109,6]]},"49":{"position":[[32,8]]},"54":{"position":[[1160,9]]},"55":{"position":[[67,7]]},"58":{"position":[[32,7]]},"59":{"position":[[328,7],[690,7],[746,8],[1022,8],[1756,8]]},"65":{"position":[[76,10],[222,9]]},"71":{"position":[[260,7],[358,6]]},"73":{"position":[[3885,7],[3938,8]]},"74":{"position":[[140,7]]},"75":{"position":[[234,8],[757,7],[1325,7],[1848,7],[2102,9]]},"76":{"position":[[1027,7]]}},"keywords":{}}],["доступа"",{"_index":830,"title":{},"content":{"71":{"position":[[973,13]]}},"keywords":{}}],["доступахлогик",{"_index":289,"title":{},"content":{"26":{"position":[[82,14]]}},"keywords":{}}],["доступеподход",{"_index":203,"title":{},"content":{"21":{"position":[[213,13]]}},"keywords":{}}],["доступн",{"_index":77,"title":{},"content":{"4":{"position":[[114,8]]},"5":{"position":[[112,8]]},"19":{"position":[[377,11]]},"24":{"position":[[32,8],[1751,9]]},"26":{"position":[[34,9]]},"28":{"position":[[50,8],[139,8]]},"30":{"position":[[100,9]]},"42":{"position":[[37,8],[259,8]]},"54":{"position":[[26,8],[82,10],[136,8],[192,10]]},"55":{"position":[[151,11]]},"65":{"position":[[272,9]]},"69":{"position":[[68,8],[226,8]]},"73":{"position":[[1507,8],[2014,9]]},"74":{"position":[[750,9],[1111,9]]},"76":{"position":[[717,9]]}},"keywords":{}}],["доступовзакрыт",{"_index":205,"title":{},"content":{"21":{"position":[[260,16]]}},"keywords":{}}],["доступовимет",{"_index":181,"title":{},"content":{"20":{"position":[[41,13]]}},"keywords":{}}],["доступовпричин",{"_index":288,"title":{},"content":{"26":{"position":[[57,15]]}},"keywords":{}}],["доступовтип",{"_index":287,"title":{},"content":{"26":{"position":[[21,12]]}},"keywords":{}}],["друг",{"_index":208,"title":{},"content":{"21":{"position":[[324,7]]},"30":{"position":[[1751,7]]},"39":{"position":[[29,4],[37,5]]},"58":{"position":[[691,7]]}},"keywords":{}}],["един",{"_index":120,"title":{"25":{"position":[[0,6]]},"38":{"position":[[25,6]]}},"content":{"5":{"position":[[386,6]]},"20":{"position":[[55,6]]},"38":{"position":[[36,6]]},"59":{"position":[[1433,7],[1495,7]]},"69":{"position":[[392,6]]}},"keywords":{}}],["заблокирова",{"_index":528,"title":{},"content":{"42":{"position":[[538,13],[747,13],[875,14]]}},"keywords":{}}],["завис",{"_index":531,"title":{},"content":{"42":{"position":[[619,7]]},"68":{"position":[[148,7]]}},"keywords":{}}],["зависет",{"_index":55,"title":{"46":{"position":[[21,8]]}},"content":{"3":{"position":[[352,8]]},"39":{"position":[[20,8]]},"46":{"position":[[31,8]]}},"keywords":{}}],["зависим",{"_index":326,"title":{},"content":{"28":{"position":[[523,11]]},"46":{"position":[[80,11]]}},"keywords":{}}],["загруж",{"_index":737,"title":{},"content":{"62":{"position":[[67,9]]}},"keywords":{}}],["загрузк",{"_index":204,"title":{},"content":{"21":{"position":[[227,8]]},"59":{"position":[[1514,8],[1609,8],[1702,8]]}},"keywords":{}}],["закр",{"_index":608,"title":{},"content":{"48":{"position":[[116,6],[180,6],[229,6]]},"66":{"position":[[12,7]]},"67":{"position":[[150,7]]}},"keywords":{}}],["закрыва",{"_index":170,"title":{},"content":{"19":{"position":[[313,9]]},"47":{"position":[[1170,9]]},"68":{"position":[[90,9]]},"69":{"position":[[1393,9]]},"71":{"position":[[348,9]]}},"keywords":{}}],["заполн",{"_index":825,"title":{},"content":{"71":{"position":[[890,9]]},"74":{"position":[[963,9]]}},"keywords":{}}],["запрашива",{"_index":714,"title":{},"content":{"61":{"position":[[209,13]]}},"keywords":{}}],["запреща",{"_index":544,"title":{},"content":{"43":{"position":[[1132,9]]}},"keywords":{}}],["запрос",{"_index":259,"title":{},"content":{"24":{"position":[[931,7]]},"57":{"position":[[82,9]]},"59":{"position":[[1828,10]]},"61":{"position":[[23,10],[158,7],[372,7]]}},"keywords":{}}],["запуска",{"_index":675,"title":{},"content":{"59":{"position":[[1358,9]]}},"keywords":{}}],["запута",{"_index":513,"title":{},"content":{"39":{"position":[[186,10]]}},"keywords":{}}],["затрат",{"_index":179,"title":{},"content":{"20":{"position":[[11,7]]}},"keywords":{}}],["зацепл",{"_index":329,"title":{},"content":{"28":{"position":[[748,9]]}},"keywords":{}}],["зацеплен",{"_index":298,"title":{"28":{"position":[[23,12]]}},"content":{"27":{"position":[[230,10],[498,10],[682,10]]},"28":{"position":[[226,11],[537,10],[577,10]]}},"keywords":{}}],["зацеплениеправ",{"_index":303,"title":{},"content":{"27":{"position":[[369,18]]}},"keywords":{}}],["защищ",{"_index":745,"title":{},"content":{"65":{"position":[[67,8]]}},"keywords":{}}],["знан",{"_index":87,"title":{},"content":{"4":{"position":[[286,6]]}},"keywords":{}}],["значительн",{"_index":716,"title":{},"content":{"61":{"position":[[311,11]]},"65":{"position":[[309,11]]}},"keywords":{}}],["избега",{"_index":559,"title":{},"content":{"45":{"position":[[875,8]]}},"keywords":{}}],["избежа",{"_index":308,"title":{},"content":{"27":{"position":[[489,8]]},"73":{"position":[[5422,8]]}},"keywords":{}}],["измен",{"_index":526,"title":{},"content":{"42":{"position":[[188,8]]}},"keywords":{}}],["изменен",{"_index":2,"title":{},"content":{"0":{"position":[[22,9]]},"41":{"position":[[218,9],[403,9]]}},"keywords":{}}],["имеют",{"_index":660,"title":{},"content":{"55":{"position":[[11,5]]}},"keywords":{}}],["имплементац",{"_index":465,"title":{},"content":{"34":{"position":[[386,13]]},"52":{"position":[[59,13]]}},"keywords":{}}],["имплементирова",{"_index":52,"title":{},"content":{"3":{"position":[[309,18]]}},"keywords":{}}],["импорт",{"_index":368,"title":{},"content":{"30":{"position":[[1740,7]]},"38":{"position":[[2236,7]]}},"keywords":{}}],["импортир",{"_index":322,"title":{},"content":{"28":{"position":[[288,11],[433,11]]}},"keywords":{}}],["импортиру",{"_index":328,"title":{},"content":{"28":{"position":[[660,10]]}},"keywords":{}}],["интерфейс",{"_index":51,"title":{},"content":{"3":{"position":[[279,11]]}},"keywords":{}}],["информац",{"_index":485,"title":{},"content":{"38":{"position":[[84,10]]}},"keywords":{}}],["информацион",{"_index":901,"title":{},"content":{"75":{"position":[[507,14],[1719,14]]},"76":{"position":[[597,14]]}},"keywords":{}}],["использ",{"_index":216,"title":{"75":{"position":[[22,13]]}},"content":{"22":{"position":[[88,12]]},"54":{"position":[[1116,10]]},"59":{"position":[[1743,12]]},"75":{"position":[[32,10]]}},"keywords":{}}],["использова",{"_index":19,"title":{"17":{"position":[[18,12]]}},"content":{"1":{"position":[[76,12]]},"3":{"position":[[493,12]]},"4":{"position":[[738,14]]},"17":{"position":[[19,12],[167,14]]},"27":{"position":[[306,12],[578,14]]},"30":{"position":[[1777,12]]},"39":{"position":[[292,12]]},"61":{"position":[[172,14],[486,12],[1401,12]]},"76":{"position":[[36,12]]}},"keywords":{}}],["использован",{"_index":102,"title":{"11":{"position":[[0,13]]},"12":{"position":[[0,13]]},"15":{"position":[[0,13]]},"30":{"position":[[7,14]]},"37":{"position":[[18,14]]},"45":{"position":[[20,13]]},"60":{"position":[[0,14]]}},"content":{"4":{"position":[[606,13]]},"38":{"position":[[1791,14]]},"45":{"position":[[1347,13]]},"59":{"position":[[1419,13],[1481,13],[1580,13]]},"61":{"position":[[409,13]]},"62":{"position":[[12,14],[362,13]]},"65":{"position":[[233,13]]},"67":{"position":[[1,13]]}},"keywords":{}}],["исследован",{"_index":749,"title":{},"content":{"65":{"position":[[174,12]]}},"keywords":{}}],["кажд",{"_index":446,"title":{"65":{"position":[[21,6]]}},"content":{"32":{"position":[[5,7]]},"59":{"position":[[86,6],[1276,7],[1374,6],[1393,7],[1645,6],[1667,7]]},"65":{"position":[[34,6],[119,7]]},"67":{"position":[[31,6],[79,6]]},"73":{"position":[[1077,7],[1249,7]]}},"keywords":{}}],["как",{"_index":666,"title":{"57":{"position":[[24,5]]}},"content":{},"keywords":{}}],["кейс",{"_index":842,"title":{},"content":{"73":{"position":[[1320,6],[1341,6],[1501,5],[1674,5],[1802,5],[2008,5],[2132,6],[3982,4],[4459,7],[4947,4],[5453,7]]},"74":{"position":[[215,6]]},"75":{"position":[[490,5],[704,5],[933,5],[1228,5],[1609,6]]}},"keywords":{}}],["клиент",{"_index":27,"title":{"3":{"position":[[3,7]]}},"content":{"3":{"position":[[462,7]]},"19":{"position":[[237,7],[274,7]]}},"keywords":{}}],["клиентеapi",{"_index":159,"title":{},"content":{"19":{"position":[[91,10]]}},"keywords":{}}],["клиентесист",{"_index":193,"title":{},"content":{"21":{"position":[[58,14]]}},"keywords":{}}],["клиентск",{"_index":121,"title":{},"content":{"5":{"position":[[393,10]]}},"keywords":{}}],["книг",{"_index":330,"title":{},"content":{"30":{"position":[[44,5],[121,5],[350,4],[443,4],[1205,5],[2603,4],[2668,5]]},"45":{"position":[[1287,5],[2151,5]]},"48":{"position":[[196,5]]},"54":{"position":[[20,5],[2715,5]]},"58":{"position":[[962,5]]},"61":{"position":[[2209,5]]},"69":{"position":[[31,5],[269,6]]},"73":{"position":[[531,5],[1208,5],[2084,4],[2201,5],[2678,4],[3662,5],[5133,4]]},"75":{"position":[[540,5],[1191,4],[1369,5],[1676,5],[1752,5]]},"76":{"position":[[338,5],[630,5]]}},"keywords":{}}],["книгепокупк",{"_index":632,"title":{},"content":{"54":{"position":[[116,12]]}},"keywords":{}}],["книгу"",{"_index":555,"title":{},"content":{"45":{"position":[[34,11]]}},"keywords":{}}],["кнопк",{"_index":74,"title":{},"content":{"4":{"position":[[78,6],[434,6]]},"5":{"position":[[76,6],[357,7]]},"28":{"position":[[13,6]]},"30":{"position":[[218,6]]},"42":{"position":[[1,6],[217,6],[502,6],[663,6],[846,6]]},"45":{"position":[[13,6]]},"47":{"position":[[1,6],[157,7]]}},"keywords":{}}],["кнопкедоступ",{"_index":597,"title":{},"content":{"47":{"position":[[1029,12]]}},"keywords":{}}],["код",{"_index":345,"title":{},"content":{"30":{"position":[[581,4],[1731,4]]},"31":{"position":[[566,5]]},"37":{"position":[[278,4]]},"38":{"position":[[392,4]]},"41":{"position":[[446,5]]},"43":{"position":[[364,4]]},"46":{"position":[[173,5]]},"54":{"position":[[559,4]]},"58":{"position":[[210,4]]},"59":{"position":[[116,4]]},"65":{"position":[[341,4]]},"73":{"position":[[1399,5],[5052,5]]}},"keywords":{}}],["количеств",{"_index":332,"title":{},"content":{"30":{"position":[[110,10],[432,10],[2592,10]]},"73":{"position":[[1835,10],[2073,10],[2471,10],[2560,10],[2667,10],[5122,10],[5437,10]]},"75":{"position":[[1006,10],[1180,10],[1970,10]]}},"keywords":{}}],["комментар",{"_index":448,"title":{},"content":{"32":{"position":[[41,11]]}},"keywords":{}}],["компаниицентрализова",{"_index":182,"title":{},"content":{"20":{"position":[[110,23]]}},"keywords":{}}],["компонент",{"_index":562,"title":{},"content":{"45":{"position":[[922,10],[1361,11]]},"71":{"position":[[218,9]]}},"keywords":{}}],["конкретн",{"_index":202,"title":{},"content":{"21":{"position":[[185,10]]},"27":{"position":[[183,11]]},"43":{"position":[[1151,10]]},"47":{"position":[[146,10]]},"62":{"position":[[126,10]]},"68":{"position":[[100,10]]},"71":{"position":[[232,10]]}},"keywords":{}}],["контекст",{"_index":49,"title":{},"content":{"3":{"position":[[251,9]]}},"keywords":{}}],["контрол",{"_index":100,"title":{},"content":{"4":{"position":[[575,9]]},"27":{"position":[[1,8]]}},"keywords":{}}],["конфигурац",{"_index":751,"title":{},"content":{"65":{"position":[[247,12]]}},"keywords":{}}],["концентрац",{"_index":291,"title":{"27":{"position":[[8,12]]}},"content":{},"keywords":{}}],["концептуальн",{"_index":34,"title":{},"content":{"3":{"position":[[39,13]]},"36":{"position":[[244,13],[354,13]]}},"keywords":{}}],["концепц",{"_index":578,"title":{},"content":{"45":{"position":[[1471,10]]}},"keywords":{}}],["котор",{"_index":333,"title":{},"content":{"30":{"position":[[127,7]]}},"keywords":{}}],["куп",{"_index":734,"title":{},"content":{"61":{"position":[[2201,7]]}},"keywords":{}}],["либ",{"_index":8,"title":{},"content":{"0":{"position":[[83,4],[114,4]]},"19":{"position":[[33,4]]}},"keywords":{}}],["лк"",{"_index":828,"title":{},"content":{"71":{"position":[[916,8]]}},"keywords":{}}],["логик",{"_index":96,"title":{"27":{"position":[[21,6]]},"39":{"position":[[18,6]]},"50":{"position":[[25,6]]}},"content":{"4":{"position":[[524,6]]},"5":{"position":[[436,6]]},"24":{"position":[[924,6]]},"26":{"position":[[1,6]]},"27":{"position":[[543,6],[655,6]]},"28":{"position":[[300,6],[445,6],[671,6]]},"39":{"position":[[197,6],[276,7]]},"45":{"position":[[1408,6]]},"54":{"position":[[361,6]]},"75":{"position":[[76,6]]}},"keywords":{}}],["логирован",{"_index":506,"title":{},"content":{"38":{"position":[[2168,11]]}},"keywords":{}}],["люб",{"_index":169,"title":{},"content":{"19":{"position":[[304,8]]}},"keywords":{}}],["максимальн",{"_index":341,"title":{},"content":{"30":{"position":[[419,12],[2579,12]]},"73":{"position":[[2060,12],[2547,12],[2654,12],[5109,12]]},"75":{"position":[[993,12],[1167,12],[1957,12]]}},"keywords":{}}],["медлен",{"_index":686,"title":{},"content":{"59":{"position":[[1907,10]]},"61":{"position":[[102,10]]}},"keywords":{}}],["мест",{"_index":740,"title":{},"content":{"62":{"position":[[356,5]]}},"keywords":{}}],["местоположен",{"_index":457,"title":{"34":{"position":[[0,15]]},"51":{"position":[[0,15]]},"64":{"position":[[0,15]]}},"content":{},"keywords":{}}],["метод",{"_index":480,"title":{"49":{"position":[[8,7]]}},"content":{"37":{"position":[[799,5]]},"43":{"position":[[54,6]]},"49":{"position":[[5,8]]},"57":{"position":[[26,5]]},"59":{"position":[[31,5],[1291,5],[1441,6],[1503,6],[1696,5],[1860,7]]},"61":{"position":[[55,7],[499,7]]}},"keywords":{}}],["мним",{"_index":300,"title":{},"content":{"27":{"position":[[264,5]]}},"keywords":{}}],["модалк",{"_index":280,"title":{},"content":{"24":{"position":[[1902,7]]},"30":{"position":[[272,7]]},"47":{"position":[[1057,7]]},"75":{"position":[[720,7],[1811,7]]},"76":{"position":[[990,7]]}},"keywords":{}}],["модельюapi",{"_index":164,"title":{},"content":{"19":{"position":[[170,10]]}},"keywords":{}}],["модул",{"_index":286,"title":{"26":{"position":[[19,7]]},"27":{"position":[[45,7]]},"36":{"position":[[28,8]]},"52":{"position":[[26,6]]}},"content":{"27":{"position":[[139,8],[195,7],[291,8],[328,8],[473,6]]},"28":{"position":[[239,6],[310,6],[366,6],[455,6],[554,9],[589,6],[681,7],[711,6]]},"30":{"position":[[1759,6]]},"31":{"position":[[878,7]]},"36":{"position":[[270,6],[380,6]]},"38":{"position":[[115,6]]},"52":{"position":[[34,6]]},"65":{"position":[[290,6]]}},"keywords":{}}],["модулейпричин",{"_index":309,"title":{},"content":{"27":{"position":[[509,14]]}},"keywords":{}}],["модулямидоступ",{"_index":299,"title":{},"content":{"27":{"position":[[247,16]]}},"keywords":{}}],["может",{"_index":32,"title":{},"content":{"3":{"position":[[18,6]]}},"keywords":{}}],["мок",{"_index":914,"title":{"76":{"position":[[0,3]]}},"content":{},"keywords":{}}],["молод",{"_index":733,"title":{},"content":{"61":{"position":[[2155,9]]}},"keywords":{}}],["момент",{"_index":791,"title":{},"content":{"69":{"position":[[280,6]]}},"keywords":{}}],["мотивац",{"_index":504,"title":{},"content":{"38":{"position":[[2059,9]]},"59":{"position":[[1409,9]]},"73":{"position":[[5401,9]]}},"keywords":{}}],["мотивациявыз",{"_index":746,"title":{},"content":{"65":{"position":[[88,14]]}},"keywords":{}}],["нажат",{"_index":119,"title":{},"content":{"5":{"position":[[341,7]]},"30":{"position":[[207,7]]}},"keywords":{}}],["назван",{"_index":471,"title":{},"content":{"36":{"position":[[183,8]]},"48":{"position":[[1,8]]}},"keywords":{}}],["найдена"",{"_index":774,"title":{},"content":{"66":{"position":[[1034,13]]}},"keywords":{}}],["налич",{"_index":107,"title":{},"content":{"4":{"position":[[701,7]]}},"keywords":{}}],["например",{"_index":209,"title":{},"content":{"21":{"position":[[343,9]]},"24":{"position":[[1871,9]]}},"keywords":{}}],["напрям",{"_index":64,"title":{"36":{"position":[[9,8]]}},"content":{"3":{"position":[[535,8]]},"46":{"position":[[22,8]]}},"keywords":{}}],["наруша",{"_index":576,"title":{},"content":{"45":{"position":[[1448,8]]}},"keywords":{}}],["наход",{"_index":458,"title":{},"content":{"34":{"position":[[14,9],[425,9]]},"51":{"position":[[13,9]]}},"keywords":{}}],["начал",{"_index":852,"title":{},"content":{"73":{"position":[[2730,7]]}},"keywords":{}}],["наш",{"_index":440,"title":{},"content":{"31":{"position":[[871,6]]}},"keywords":{}}],["небольш",{"_index":781,"title":{},"content":{"67":{"position":[[55,9]]}},"keywords":{}}],["неверн",{"_index":90,"title":{},"content":{"4":{"position":[[405,8]]}},"keywords":{}}],["недостаточн",{"_index":435,"title":{},"content":{"31":{"position":[[695,12],[1088,12]]}},"keywords":{}}],["недоступн",{"_index":627,"title":{},"content":{"52":{"position":[[7,10]]},"73":{"position":[[1680,11],[1808,11],[3899,11],[3987,11]]},"76":{"position":[[1120,11]]}},"keywords":{}}],["нежелательн",{"_index":297,"title":{"28":{"position":[[9,13]]}},"content":{"27":{"position":[[216,13],[355,13]]}},"keywords":{}}],["нейминг",{"_index":601,"title":{"48":{"position":[[0,8]]},"49":{"position":[[0,7]]},"55":{"position":[[0,8]]}},"content":{},"keywords":{}}],["необходим",{"_index":62,"title":{"19":{"position":[[0,10]]}},"content":{"3":{"position":[[470,10]]},"4":{"position":[[336,10],[755,11]]},"19":{"position":[[282,10]]},"24":{"position":[[895,14]]},"27":{"position":[[109,10]]},"30":{"position":[[368,10],[1766,10]]},"31":{"position":[[97,10],[820,10]]},"37":{"position":[[827,11]]},"38":{"position":[[417,10],[2225,10]]},"39":{"position":[[248,10]]},"45":{"position":[[864,10]]},"47":{"position":[[1499,10],[1568,11]]},"54":{"position":[[400,10],[564,10]]},"58":{"position":[[131,10]]},"59":{"position":[[141,10]]},"60":{"position":[[30,10]]},"61":{"position":[[1,10],[475,10]]},"62":{"position":[[308,13]]},"66":{"position":[[1,10]]},"67":{"position":[[105,10]]},"68":{"position":[[44,10]]},"69":{"position":[[1343,10]]},"73":{"position":[[1047,10],[1096,10],[1268,10],[2755,10],[3947,10]]},"74":{"position":[[24,11]]},"75":{"position":[[169,10]]},"76":{"position":[[25,10]]}},"keywords":{}}],["неправильн",{"_index":591,"title":{},"content":{"47":{"position":[[166,12]]}},"keywords":{}}],["непредвиден",{"_index":907,"title":{},"content":{"75":{"position":[[1288,14],[2065,14]]}},"keywords":{}}],["нов",{"_index":5,"title":{},"content":{"0":{"position":[[60,5]]}},"keywords":{}}],["нуж",{"_index":28,"title":{"3":{"position":[[11,5]]}},"content":{},"keywords":{}}],["нужн",{"_index":42,"title":{"57":{"position":[[37,5]]}},"content":{"3":{"position":[[153,5]]},"57":{"position":[[59,5]]},"61":{"position":[[230,5]]}},"keywords":{}}],["обернут",{"_index":683,"title":{},"content":{"59":{"position":[[1783,8]]}},"keywords":{}}],["област",{"_index":68,"title":{},"content":{"4":{"position":[[12,7]]},"5":{"position":[[12,7]]},"36":{"position":[[48,7]]}},"keywords":{}}],["обрабатыва",{"_index":818,"title":{},"content":{"71":{"position":[[377,12]]},"73":{"position":[[4433,14]]}},"keywords":{}}],["обработа",{"_index":257,"title":{},"content":{"24":{"position":[[860,10]]},"62":{"position":[[322,10]]},"68":{"position":[[322,10]]},"69":{"position":[[1264,10]]},"70":{"position":[[30,10]]},"73":{"position":[[1279,10]]}},"keywords":{}}],["обработк",{"_index":735,"title":{"62":{"position":[[0,9]]},"70":{"position":[[0,9]]}},"content":{},"keywords":{}}],["объедин",{"_index":439,"title":{},"content":{"31":{"position":[[831,10]]}},"keywords":{}}],["объект",{"_index":547,"title":{},"content":{"44":{"position":[[29,6]]},"62":{"position":[[117,6]]}},"keywords":{}}],["огранич",{"_index":515,"title":{},"content":{"41":{"position":[[106,9]]}},"keywords":{}}],["ограничен",{"_index":518,"title":{},"content":{"41":{"position":[[185,11]]},"42":{"position":[[97,11],[369,11]]},"67":{"position":[[187,11]]}},"keywords":{}}],["одинаков",{"_index":596,"title":{},"content":{"47":{"position":[[998,10]]}},"keywords":{}}],["одн",{"_index":186,"title":{"27":{"position":[[39,5]]},"31":{"position":[[23,5]]}},"content":{"20":{"position":[[171,5]]},"27":{"position":[[467,5]]},"31":{"position":[[1,4],[118,5]]},"54":{"position":[[348,4]]},"73":{"position":[[4448,5]]}},"keywords":{}}],["одновремен",{"_index":669,"title":{},"content":{"58":{"position":[[676,12]]}},"keywords":{}}],["однозначн",{"_index":45,"title":{},"content":{"3":{"position":[[191,10]]}},"keywords":{}}],["онлайн",{"_index":611,"title":{},"content":{"48":{"position":[[202,6]]},"54":{"position":[[2721,6]]}},"keywords":{}}],["описа",{"_index":17,"title":{},"content":{"1":{"position":[[38,9]]},"73":{"position":[[5042,7]]}},"keywords":{}}],["описан",{"_index":752,"title":{},"content":{"65":{"position":[[262,9]]}},"keywords":{}}],["описыва",{"_index":172,"title":{},"content":{"19":{"position":[[367,9]]}},"keywords":{}}],["оплат",{"_index":175,"title":{},"content":{"19":{"position":[[446,10]]},"30":{"position":[[298,7]]},"42":{"position":[[460,8]]},"54":{"position":[[1711,8]]},"61":{"position":[[996,8]]},"71":{"position":[[745,8]]},"75":{"position":[[728,7],[1819,7]]},"76":{"position":[[998,7]]}},"keywords":{}}],["оплата...)описа",{"_index":517,"title":{},"content":{"41":{"position":[[165,19]]}},"keywords":{}}],["оплач",{"_index":115,"title":{},"content":{"5":{"position":[[253,7]]},"30":{"position":[[183,7]]},"31":{"position":[[400,7]]},"61":{"position":[[2028,11]]},"73":{"position":[[1708,7],[2037,7],[2410,9],[2631,7],[4015,7],[4154,9],[5086,7]]}},"keywords":{}}],["оплаченпревыш",{"_index":331,"title":{},"content":{"30":{"position":[[83,16]]}},"keywords":{}}],["определен",{"_index":174,"title":{},"content":{"19":{"position":[[405,12]]},"73":{"position":[[1024,12]]}},"keywords":{}}],["определя",{"_index":667,"title":{},"content":{"57":{"position":[[15,10]]}},"keywords":{}}],["оптимальн",{"_index":718,"title":{},"content":{"61":{"position":[[392,12]]}},"keywords":{}}],["оптимизац",{"_index":681,"title":{"61":{"position":[[0,11]]}},"content":{"59":{"position":[[1596,12]]}},"keywords":{}}],["организац",{"_index":82,"title":{},"content":{"4":{"position":[[189,12],[391,12],[471,12]]},"28":{"position":[[176,11],[353,12]]},"41":{"position":[[152,12]]},"42":{"position":[[327,12],[488,12]]},"48":{"position":[[249,12]]}},"keywords":{}}],["организации.docact",{"_index":108,"title":{},"content":{"4":{"position":[[709,22]]}},"keywords":{}}],["организацию"",{"_index":318,"title":{},"content":{"28":{"position":[[121,17]]}},"keywords":{}}],["организациякнопк",{"_index":316,"title":{},"content":{"28":{"position":[[89,17]]}},"keywords":{}}],["основ",{"_index":516,"title":{},"content":{"41":{"position":[[119,6]]},"47":{"position":[[1547,6]]},"68":{"position":[[201,6]]},"69":{"position":[[191,6]]}},"keywords":{}}],["основыва",{"_index":524,"title":{},"content":{"42":{"position":[[109,12],[381,12],[808,12]]}},"keywords":{}}],["оставл",{"_index":447,"title":{},"content":{"32":{"position":[[32,8]]}},"keywords":{}}],["ответствен",{"_index":721,"title":{},"content":{"61":{"position":[[1353,12]]}},"keywords":{}}],["отвеча",{"_index":602,"title":{},"content":{"48":{"position":[[28,8]]},"59":{"position":[[1211,8]]}},"keywords":{}}],["отдельн",{"_index":154,"title":{},"content":{"17":{"position":[[182,8]]},"59":{"position":[[1686,9]]},"73":{"position":[[1117,9]]}},"keywords":{}}],["отказ",{"_index":195,"title":{"29":{"position":[[17,6]]},"70":{"position":[[27,6]]}},"content":{"21":{"position":[[80,6],[204,6]]},"26":{"position":[[73,6]]},"27":{"position":[[524,6],[646,6]]},"31":{"position":[[22,6],[519,7]]},"38":{"position":[[2215,6]]},"44":{"position":[[97,6],[254,6]]},"68":{"position":[[353,7]]},"69":{"position":[[1283,7],[1321,6]]},"70":{"position":[[63,7]]},"71":{"position":[[251,6],[408,6]]},"73":{"position":[[3929,6]]},"74":{"position":[[131,6]]},"75":{"position":[[226,5]]}},"keywords":{}}],["отказа",{"_index":903,"title":{},"content":{"75":{"position":[[746,8],[1837,8]]},"76":{"position":[[1016,8]]}},"keywords":{}}],["отказыва",{"_index":256,"title":{},"content":{"24":{"position":[[813,10]]}},"keywords":{}}],["откр",{"_index":335,"title":{},"content":{"30":{"position":[[262,9]]},"42":{"position":[[174,8],[446,8]]},"74":{"position":[[1093,7]]}},"keywords":{}}],["открыва",{"_index":902,"title":{},"content":{"75":{"position":[[710,9]]}},"keywords":{}}],["открыт",{"_index":279,"title":{},"content":{"24":{"position":[[1893,8]]},"41":{"position":[[376,8]]}},"keywords":{}}],["открыт/закр",{"_index":605,"title":{},"content":{"48":{"position":[[61,13]]}},"keywords":{}}],["отлича",{"_index":35,"title":{},"content":{"3":{"position":[[53,10]]}},"keywords":{}}],["относ",{"_index":472,"title":{},"content":{"36":{"position":[[258,9],[368,9]]}},"keywords":{}}],["относя",{"_index":301,"title":{},"content":{"27":{"position":[[270,11]]}},"keywords":{}}],["отобража",{"_index":557,"title":{},"content":{"45":{"position":[[56,12]]},"47":{"position":[[37,12]]}},"keywords":{}}],["отобраз",{"_index":338,"title":{},"content":{"30":{"position":[[379,10]]}},"keywords":{}}],["отрендер",{"_index":815,"title":{},"content":{"71":{"position":[[206,11]]}},"keywords":{}}],["отрицательн",{"_index":841,"title":{},"content":{"73":{"position":[[1306,13]]},"74":{"position":[[69,13]]}},"keywords":{}}],["ошибк",{"_index":431,"title":{},"content":{"31":{"position":[[642,6],[1019,6]]},"75":{"position":[[964,8],[1259,8],[1303,6],[1928,8],[2036,8],[2080,6]]}},"keywords":{}}],["ошибок",{"_index":187,"title":{},"content":{"20":{"position":[[186,6]]},"31":{"position":[[557,6]]}},"keywords":{}}],["пакет",{"_index":212,"title":{"22":{"position":[[8,5]]}},"content":{"22":{"position":[[53,5]]},"31":{"position":[[451,5]]},"53":{"position":[[41,6]]}},"keywords":{}}],["панел",{"_index":806,"title":{},"content":{"69":{"position":[[1047,7]]}},"keywords":{}}],["паттерн",{"_index":124,"title":{"6":{"position":[[18,8]]},"20":{"position":[[11,8]]},"21":{"position":[[0,7]]}},"content":{"19":{"position":[[134,7],[216,7]]},"22":{"position":[[29,8]]}},"keywords":{}}],["паттернизбежа",{"_index":184,"title":{},"content":{"20":{"position":[[144,15]]}},"keywords":{}}],["перезагруз",{"_index":386,"title":{},"content":{"30":{"position":[[2702,13]]},"61":{"position":[[2234,13]]},"75":{"position":[[1403,13]]}},"keywords":{}}],["переиспольз",{"_index":415,"title":{},"content":{"31":{"position":[[29,16]]}},"keywords":{}}],["переиспользова",{"_index":305,"title":{},"content":{"27":{"position":[[431,17]]},"39":{"position":[[60,16],[259,16]]}},"keywords":{}}],["переиспользован",{"_index":509,"title":{"39":{"position":[[0,17]]},"50":{"position":[[7,17]]}},"content":{"39":{"position":[[98,17]]}},"keywords":{}}],["перенос",{"_index":574,"title":{},"content":{"45":{"position":[[1398,9]]}},"keywords":{}}],["пересечен",{"_index":512,"title":{},"content":{"39":{"position":[[154,11]]}},"keywords":{}}],["перманентн",{"_index":63,"title":{},"content":{"3":{"position":[[481,11]]}},"keywords":{}}],["писа",{"_index":836,"title":{},"content":{"73":{"position":[[1058,6]]}},"keywords":{}}],["платн",{"_index":79,"title":{},"content":{"4":{"position":[[142,7]]},"5":{"position":[[140,7]]},"42":{"position":[[295,7]]}},"keywords":{}}],["повторен",{"_index":185,"title":{},"content":{"20":{"position":[[160,10]]}},"keywords":{}}],["подготавлива",{"_index":497,"title":{},"content":{"38":{"position":[[1472,14]]},"59":{"position":[[983,14]]}},"keywords":{}}],["подготов",{"_index":493,"title":{"59":{"position":[[29,10]]}},"content":{"38":{"position":[[1199,11]]},"59":{"position":[[710,11]]}},"keywords":{}}],["подготовк",{"_index":138,"title":{"13":{"position":[[0,10]]},"56":{"position":[[0,10]]}},"content":{"27":{"position":[[731,10]]},"37":{"position":[[809,10]]},"38":{"position":[[2099,10]]},"57":{"position":[[32,10]]},"59":{"position":[[66,10],[1193,10],[1297,10],[1448,10],[1868,10]]},"61":{"position":[[63,10]]}},"keywords":{}}],["подготовл",{"_index":713,"title":{},"content":{"60":{"position":[[819,13]]}},"keywords":{}}],["поддержива",{"_index":190,"title":{},"content":{"21":{"position":[[11,14]]},"73":{"position":[[2815,12]]}},"keywords":{}}],["поддержк",{"_index":215,"title":{},"content":{"22":{"position":[[19,9]]},"46":{"position":[[163,9]]},"65":{"position":[[159,10],[357,9]]},"67":{"position":[[233,10]]}},"keywords":{}}],["подключен",{"_index":315,"title":{},"content":{"28":{"position":[[76,12]]}},"keywords":{}}],["подм",{"_index":915,"title":{},"content":{"76":{"position":[[5,7]]}},"keywords":{}}],["подобласт",{"_index":468,"title":{},"content":{"36":{"position":[[26,10],[123,10]]}},"keywords":{}}],["подход",{"_index":678,"title":{},"content":{"59":{"position":[[1474,6]]},"69":{"position":[[327,8]]}},"keywords":{}}],["позвол",{"_index":307,"title":{},"content":{"27":{"position":[[480,8]]},"37":{"position":[[680,8]]}},"keywords":{}}],["позволя",{"_index":177,"title":{"20":{"position":[[20,10]]}},"content":{"21":{"position":[[98,9]]},"27":{"position":[[388,11]]},"38":{"position":[[1189,9]]},"59":{"position":[[700,9]]},"65":{"position":[[132,9]]},"68":{"position":[[274,11]]},"69":{"position":[[1254,9]]},"71":{"position":[[196,9]]},"73":{"position":[[5412,9]]}},"keywords":{}}],["показа",{"_index":812,"title":{},"content":{"69":{"position":[[1354,8]]}},"keywords":{}}],["показыва",{"_index":900,"title":{},"content":{"75":{"position":[[496,10],[939,10],[1234,10]]}},"keywords":{}}],["покр",{"_index":883,"title":{},"content":{"74":{"position":[[37,7]]}},"keywords":{}}],["покрыва",{"_index":888,"title":{},"content":{"74":{"position":[[195,9]]}},"keywords":{}}],["покрыт",{"_index":834,"title":{"73":{"position":[[9,8]]}},"content":{},"keywords":{}}],["политик",{"_index":456,"title":{"33":{"position":[[10,8]]},"35":{"position":[[9,8]]},"36":{"position":[[0,8]]},"38":{"position":[[9,9]]}},"content":{"34":{"position":[[5,8]]},"37":{"position":[[662,9]]}},"keywords":{}}],["полк",{"_index":282,"title":{},"content":{"24":{"position":[[2025,5]]},"30":{"position":[[58,6],[153,5],[358,6],[1199,5],[2302,8],[2611,7],[2677,5]]},"58":{"position":[[956,5]]},"73":{"position":[[525,5],[1217,7],[2092,5],[2210,7],[2686,7],[3671,7],[5141,7]]},"75":{"position":[[677,8],[1199,7],[1378,5],[1685,7]]},"76":{"position":[[347,7],[963,8]]}},"keywords":{}}],["полке"",{"_index":342,"title":{},"content":{"30":{"position":[[451,12]]}},"keywords":{}}],["полку</button>",{"_index":407,"title":{},"content":{"30":{"position":[[3307,20]]}},"keywords":{}}],["полку"",{"_index":334,"title":{},"content":{"30":{"position":[[243,11]]}},"keywords":{}}],["положительн",{"_index":840,"title":{},"content":{"73":{"position":[[1290,13]]},"74":{"position":[[53,13]]}},"keywords":{}}],["получ",{"_index":668,"title":{},"content":{"58":{"position":[[154,8]]}},"keywords":{}}],["получа",{"_index":201,"title":{},"content":{"21":{"position":[[176,8]]},"27":{"position":[[120,8]]},"28":{"position":[[502,8]]}},"keywords":{}}],["получен",{"_index":166,"title":{"62":{"position":[[18,9]]}},"content":{"19":{"position":[[254,10]]},"38":{"position":[[74,9]]},"61":{"position":[[1330,9]]}},"keywords":{}}],["пользовател",{"_index":78,"title":{},"content":{"4":{"position":[[127,12],[300,12],[378,12],[686,12]]},"5":{"position":[[125,12],[272,13]]},"21":{"position":[[149,12]]},"24":{"position":[[942,12]]},"30":{"position":[[13,12],[167,12],[311,12]]},"31":{"position":[[1191,12]]},"41":{"position":[[235,12]]},"42":{"position":[[132,12],[202,13],[279,13],[404,12],[637,13],[703,13],[831,13]]},"45":{"position":[[81,12]]},"47":{"position":[[62,12]]},"54":{"position":[[55,12],[165,12],[386,13]]},"69":{"position":[[238,12]]},"74":{"position":[[947,12],[1020,12],[1145,12]]}},"keywords":{}}],["пользовательск",{"_index":50,"title":{},"content":{"3":{"position":[[261,17]]}},"keywords":{}}],["пользователя)услов",{"_index":522,"title":{},"content":{"41":{"position":[[418,20]]}},"keywords":{}}],["помощ",{"_index":541,"title":{},"content":{"43":{"position":[[46,7]]},"53":{"position":[[19,7]]}},"keywords":{}}],["пониман",{"_index":754,"title":{},"content":{"65":{"position":[[331,9]]}},"keywords":{}}],["попроб",{"_index":283,"title":{},"content":{"24":{"position":[[2039,10]]},"30":{"position":[[2691,10]]},"61":{"position":[[2223,10]]},"75":{"position":[[1392,10]]}},"keywords":{}}],["пород",{"_index":302,"title":{},"content":{"27":{"position":[[347,7]]}},"keywords":{}}],["послед",{"_index":98,"title":{},"content":{"4":{"position":[[556,11]]}},"keywords":{}}],["последств",{"_index":587,"title":{},"content":{"46":{"position":[[141,11]]}},"keywords":{}}],["посредств",{"_index":540,"title":{"43":{"position":[[21,11]]}},"content":{"58":{"position":[[706,11]]}},"keywords":{}}],["потер",{"_index":99,"title":{},"content":{"4":{"position":[[568,6]]}},"keywords":{}}],["поэт",{"_index":467,"title":{},"content":{"34":{"position":[[417,7]]},"36":{"position":[[143,7],[293,7],[394,7]]},"69":{"position":[[374,7]]},"75":{"position":[[151,7]]}},"keywords":{}}],["прав",{"_index":6,"title":{},"content":{"0":{"position":[[66,6]]},"27":{"position":[[458,6]]},"51":{"position":[[5,7]]}},"keywords":{}}],["правильн",{"_index":101,"title":{},"content":{"4":{"position":[[586,10]]},"47":{"position":[[1081,10]]}},"keywords":{}}],["превыш",{"_index":843,"title":{},"content":{"73":{"position":[[1825,9],[2050,9],[2461,9],[2644,9],[5099,9]]},"75":{"position":[[983,9],[1947,9]]}},"keywords":{}}],["предел",{"_index":337,"title":{},"content":{"30":{"position":[[331,6]]}},"keywords":{}}],["предложен",{"_index":1,"title":{},"content":{"0":{"position":[[7,11]]},"30":{"position":[[282,12]]}},"keywords":{}}],["предмет",{"_index":47,"title":{},"content":{"3":{"position":[[221,7]]}},"keywords":{}}],["предметн",{"_index":67,"title":{},"content":{"4":{"position":[[1,10]]},"5":{"position":[[1,10]]},"36":{"position":[[15,10],[37,10],[112,10]]}},"keywords":{}}],["предназначен",{"_index":451,"title":{},"content":{"32":{"position":[[68,14]]}},"keywords":{}}],["предоставля",{"_index":151,"title":{"21":{"position":[[8,14]]}},"content":{"17":{"position":[[88,13]]},"19":{"position":[[102,13],[181,13]]}},"keywords":{}}],["префикс",{"_index":619,"title":{},"content":{"49":{"position":[[53,7]]},"55":{"position":[[17,7]]}},"keywords":{}}],["приватн",{"_index":625,"title":{"52":{"position":[[8,9]]}},"content":{},"keywords":{}}],["привед",{"_index":310,"title":{},"content":{"27":{"position":[[662,8]]}},"keywords":{}}],["приведет",{"_index":94,"title":{},"content":{"4":{"position":[[488,8]]},"46":{"position":[[98,8]]}},"keywords":{}}],["привнос",{"_index":57,"title":{},"content":{"3":{"position":[[376,9]]}},"keywords":{}}],["привод",{"_index":511,"title":{},"content":{"39":{"position":[[143,8]]}},"keywords":{}}],["приложен",{"_index":97,"title":{"63":{"position":[[30,10]]}},"content":{"4":{"position":[[543,10],[774,10]]},"20":{"position":[[98,11],[213,11]]},"21":{"position":[[283,10]]},"26":{"position":[[46,10],[114,10]]},"27":{"position":[[19,10]]},"38":{"position":[[59,10],[122,10],[825,10]]},"41":{"position":[[83,10]]},"59":{"position":[[336,10],[1731,11],[1950,10]]},"60":{"position":[[69,11],[762,11]]},"61":{"position":[[145,11],[251,10],[355,10],[1375,11]]},"69":{"position":[[1422,11]]}},"keywords":{}}],["применен",{"_index":176,"title":{"20":{"position":[[0,10]]}},"content":{},"keywords":{}}],["применя",{"_index":155,"title":{"19":{"position":[[11,9]]}},"content":{},"keywords":{}}],["пример",{"_index":66,"title":{"4":{"position":[[0,6]]},"5":{"position":[[0,6]]},"6":{"position":[[0,6]]},"24":{"position":[[0,7]]},"28":{"position":[[0,6]]},"30":{"position":[[0,6]]},"37":{"position":[[0,6]]},"42":{"position":[[0,7]]},"45":{"position":[[0,6]]},"47":{"position":[[0,7]]},"54":{"position":[[0,7]]},"58":{"position":[[0,7]]},"66":{"position":[[0,7]]},"69":{"position":[[0,7]]},"71":{"position":[[0,7]]}},"content":{"22":{"position":[[103,8]]},"36":{"position":[[202,7]]},"38":{"position":[[176,6],[1784,6]]},"47":{"position":[[933,8]]},"48":{"position":[[100,7]]},"73":{"position":[[1,6]]},"75":{"position":[[1,7]]}},"keywords":{}}],["принима",{"_index":7,"title":{},"content":{"0":{"position":[[73,9]]},"61":{"position":[[507,11]]},"67":{"position":[[199,11]]}},"keywords":{}}],["принцип",{"_index":831,"title":{"72":{"position":[[0,8]]}},"content":{},"keywords":{}}],["присутств",{"_index":589,"title":{},"content":{"47":{"position":[[122,12]]}},"keywords":{}}],["причин",{"_index":194,"title":{"27":{"position":[[0,7]]},"29":{"position":[[9,7]]},"70":{"position":[[20,6]]}},"content":{"21":{"position":[[73,6],[196,7]]},"24":{"position":[[836,9]]},"27":{"position":[[639,6]]},"31":{"position":[[14,7],[206,7],[511,7]]},"43":{"position":[[1162,8]]},"44":{"position":[[89,7],[245,8]]},"68":{"position":[[345,7]]},"69":{"position":[[1275,7],[1313,7]]},"70":{"position":[[51,7]]},"71":{"position":[[243,7],[400,7]]},"75":{"position":[[783,8],[1874,10]]},"76":{"position":[[1053,10],[1134,8]]}},"keywords":{}}],["пробл",{"_index":736,"title":{"62":{"position":[[10,7]]}},"content":{},"keywords":{}}],["проблем",{"_index":83,"title":{},"content":{"4":{"position":[[203,8]]},"5":{"position":[[207,8]]}},"keywords":{}}],["проверк",{"_index":93,"title":{},"content":{"4":{"position":[[462,8],[789,8]]},"5":{"position":[[289,8]]},"28":{"position":[[334,8],[471,8]]},"54":{"position":[[368,8]]}},"keywords":{}}],["проверя",{"_index":106,"title":{},"content":{"4":{"position":[[671,9]]},"5":{"position":[[241,11],[473,9]]},"47":{"position":[[1510,9]]},"73":{"position":[[3958,9]]},"74":{"position":[[148,9]]}},"keywords":{}}],["провест",{"_index":117,"title":{},"content":{"5":{"position":[[311,8]]}},"keywords":{}}],["проект",{"_index":469,"title":{},"content":{"36":{"position":[[56,8],[134,8]]}},"keywords":{}}],["проектирован",{"_index":20,"title":{},"content":{"1":{"position":[[93,14]]}},"keywords":{}}],["произойт",{"_index":428,"title":{},"content":{"31":{"position":[[541,9]]}},"keywords":{}}],["произошл",{"_index":430,"title":{},"content":{"31":{"position":[[632,9],[1009,9]]},"75":{"position":[[1278,9],[2055,9]]}},"keywords":{}}],["происход",{"_index":579,"title":{},"content":{"45":{"position":[[1510,11]]},"47":{"position":[[973,10]]},"73":{"position":[[1348,10]]}},"keywords":{}}],["пройд",{"_index":255,"title":{},"content":{"24":{"position":[[800,9]]}},"keywords":{}}],["пройден",{"_index":870,"title":{},"content":{"73":{"position":[[4040,10]]}},"keywords":{}}],["пройт",{"_index":281,"title":{},"content":{"24":{"position":[[1951,6]]}},"keywords":{}}],["прост",{"_index":214,"title":{},"content":{"22":{"position":[[11,7]]},"67":{"position":[[225,7]]}},"keywords":{}}],["простот",{"_index":748,"title":{},"content":{"65":{"position":[[150,8],[348,8]]}},"keywords":{}}],["протестирова",{"_index":897,"title":{},"content":{"75":{"position":[[114,14],[180,14]]}},"keywords":{}}],["противн",{"_index":152,"title":{},"content":{"17":{"position":[[128,9]]}},"keywords":{}}],["прохожден",{"_index":260,"title":{},"content":{"24":{"position":[[955,11]]}},"keywords":{}}],["прочита",{"_index":33,"title":{},"content":{"3":{"position":[[25,9]]},"54":{"position":[[2705,9]]}},"keywords":{}}],["прочтен",{"_index":905,"title":{},"content":{"75":{"position":[[1017,9],[1981,11]]}},"keywords":{}}],["прошел",{"_index":112,"title":{},"content":{"5":{"position":[[168,6]]}},"keywords":{}}],["работ",{"_index":199,"title":{},"content":{"21":{"position":[[129,6]]}},"keywords":{}}],["работа",{"_index":161,"title":{},"content":{"19":{"position":[[142,8]]},"36":{"position":[[94,8]]}},"keywords":{}}],["развива",{"_index":183,"title":{},"content":{"20":{"position":[[134,9]]}},"keywords":{}}],["разн",{"_index":188,"title":{},"content":{"20":{"position":[[206,6]]},"27":{"position":[[284,6]]},"31":{"position":[[52,7]]},"38":{"position":[[2244,6]]}},"keywords":{}}],["разработк",{"_index":180,"title":{},"content":{"20":{"position":[[22,10]]}},"keywords":{}}],["разработчик",{"_index":200,"title":{},"content":{"21":{"position":[[164,11]]}},"keywords":{}}],["разреша",{"_index":543,"title":{},"content":{"43":{"position":[[1094,9]]}},"keywords":{}}],["разрешен",{"_index":560,"title":{},"content":{"45":{"position":[[884,10],[1483,10]]},"75":{"position":[[213,10]]}},"keywords":{}}],["рамк",{"_index":319,"title":{},"content":{"28":{"position":[[162,6]]},"36":{"position":[[105,6]]}},"keywords":{}}],["располага",{"_index":420,"title":{},"content":{"31":{"position":[[230,13]]}},"keywords":{}}],["расчет",{"_index":60,"title":{},"content":{"3":{"position":[[424,7]]},"27":{"position":[[554,7]]},"31":{"position":[[616,7],[993,7]]}},"keywords":{}}],["расширя",{"_index":165,"title":{},"content":{"19":{"position":[[224,9]]}},"keywords":{}}],["реакц",{"_index":898,"title":{},"content":{"75":{"position":[[202,7]]}},"keywords":{}}],["реализ",{"_index":321,"title":{},"content":{"28":{"position":[[251,9],[386,9]]},"41":{"position":[[452,11]]}},"keywords":{}}],["реализац",{"_index":123,"title":{"6":{"position":[[7,10]]},"45":{"position":[[7,10]]},"53":{"position":[[0,10]]}},"content":{"20":{"position":[[62,10],[193,10]]},"24":{"position":[[80,10]]},"38":{"position":[[183,11],[2157,10]]},"68":{"position":[[137,10],[296,10]]},"69":{"position":[[101,10],[287,11]]}},"keywords":{}}],["реализова",{"_index":156,"title":{},"content":{"19":{"position":[[15,11]]},"22":{"position":[[42,10]]},"24":{"position":[[1881,11]]},"54":{"position":[[253,11],[336,11],[411,11]]},"69":{"position":[[140,10]]},"75":{"position":[[10,13]]}},"keywords":{}}],["реализу",{"_index":792,"title":{},"content":{"69":{"position":[[382,9]]}},"keywords":{}}],["реализуем",{"_index":844,"title":{},"content":{"73":{"position":[[2115,11]]},"75":{"position":[[1592,11]]}},"keywords":{}}],["реальн",{"_index":344,"title":{},"content":{"30":{"position":[[572,8],[1722,8]]},"37":{"position":[[269,8]]},"38":{"position":[[383,8]]},"43":{"position":[[355,8]]},"54":{"position":[[550,8]]},"58":{"position":[[201,8]]},"59":{"position":[[107,8]]}},"keywords":{}}],["регистрир",{"_index":492,"title":{},"content":{"38":{"position":[[1162,12]]},"59":{"position":[[673,12],[1259,12]]}},"keywords":{}}],["редактирован",{"_index":599,"title":{},"content":{"47":{"position":[[1065,14]]}},"keywords":{}}],["рекоменд",{"_index":710,"title":{},"content":{"60":{"position":[[738,13]]}},"keywords":{}}],["рендер",{"_index":711,"title":{},"content":{"60":{"position":[[752,9]]},"61":{"position":[[347,7]]}},"keywords":{}}],["рендеринг",{"_index":687,"title":{},"content":{"59":{"position":[[1940,9]]},"61":{"position":[[135,9],[240,10]]}},"keywords":{}}],["решен",{"_index":91,"title":{},"content":{"4":{"position":[[414,7],[597,7]]},"5":{"position":[[366,7]]},"28":{"position":[[216,7],[565,7]]},"30":{"position":[[465,7]]},"45":{"position":[[121,7]]},"47":{"position":[[179,8],[1092,8]]},"54":{"position":[[234,7]]}},"keywords":{}}],["реэкспортирова",{"_index":346,"title":{},"content":{"30":{"position":[[593,18]]},"37":{"position":[[290,18]]},"38":{"position":[[428,16]]},"43":{"position":[[376,18]]},"54":{"position":[[575,16]]},"58":{"position":[[222,18]]},"59":{"position":[[152,16]]}},"keywords":{}}],["рожден",{"_index":827,"title":{},"content":{"71":{"position":[[905,8]]},"74":{"position":[[978,10],[1136,8]]}},"keywords":{}}],["рол",{"_index":70,"title":{},"content":{"4":{"position":[[26,4],[295,4],[313,5],[681,4]]},"19":{"position":[[127,6],[427,6]]},"41":{"position":[[145,6],[413,4]]},"42":{"position":[[197,4]]}},"keywords":{}}],["ролев",{"_index":163,"title":{},"content":{"19":{"position":[[162,7]]}},"keywords":{}}],["рост",{"_index":419,"title":{},"content":{"31":{"position":[[200,5]]},"46":{"position":[[119,5]]},"47":{"position":[[993,4]]},"73":{"position":[[5431,5]]}},"keywords":{}}],["рут",{"_index":206,"title":{"63":{"position":[[24,5]]}},"content":{"21":{"position":[[277,5]]},"26":{"position":[[108,5]]},"65":{"position":[[282,5]]},"69":{"position":[[313,4]]}},"keywords":{}}],["рутудоступ",{"_index":598,"title":{},"content":{"47":{"position":[[1044,10]]}},"keywords":{}}],["ряд",{"_index":784,"title":{},"content":{"68":{"position":[[124,3]]}},"keywords":{}}],["рядов",{"_index":523,"title":{},"content":{"41":{"position":[[464,7]]}},"keywords":{}}],["сведен",{"_index":160,"title":{},"content":{"19":{"position":[[116,8],[195,8],[434,8]]}},"keywords":{}}],["связ",{"_index":61,"title":{},"content":{"3":{"position":[[445,5]]},"65":{"position":[[205,5]]}},"keywords":{}}],["связа",{"_index":65,"title":{"36":{"position":[[18,7]]}},"content":{"3":{"position":[[544,7]]},"27":{"position":[[83,6]]}},"keywords":{}}],["связк",{"_index":162,"title":{},"content":{"19":{"position":[[153,6]]}},"keywords":{}}],["связыван",{"_index":595,"title":{},"content":{"47":{"position":[[946,10]]}},"keywords":{}}],["сервис",{"_index":122,"title":{},"content":{"5":{"position":[[404,7]]},"21":{"position":[[332,10]]}},"keywords":{}}],["систем",{"_index":43,"title":{"36":{"position":[[37,8]]}},"content":{"3":{"position":[[165,7]]},"19":{"position":[[3,7],[38,7]]},"20":{"position":[[33,7],[73,7]]}},"keywords":{}}],["системевозможн",{"_index":312,"title":{},"content":{"27":{"position":[[695,18]]}},"keywords":{}}],["системн",{"_index":427,"title":{},"content":{"31":{"position":[[501,9]]}},"keywords":{}}],["след",{"_index":685,"title":{},"content":{"59":{"position":[[1817,7]]},"61":{"position":[[12,7]]}},"keywords":{}}],["сло",{"_index":575,"title":{},"content":{"45":{"position":[[1438,5]]},"60":{"position":[[64,4]]}},"keywords":{}}],["сложн",{"_index":588,"title":{},"content":{"46":{"position":[[155,7]]}},"keywords":{}}],["сложност",{"_index":417,"title":{},"content":{"31":{"position":[[173,9]]},"59":{"position":[[1569,10]]}},"keywords":{}}],["случа",{"_index":150,"title":{},"content":{"17":{"position":[[60,7],[138,6]]},"27":{"position":[[74,8]]},"61":{"position":[[1320,6]]},"69":{"position":[[1300,7]]}},"keywords":{}}],["смен",{"_index":284,"title":{},"content":{"24":{"position":[[2050,7]]}},"keywords":{}}],["снят",{"_index":519,"title":{},"content":{"41":{"position":[[208,5]]}},"keywords":{}}],["соблюда",{"_index":679,"title":{},"content":{"59":{"position":[[1546,9]]}},"keywords":{}}],["соглашен",{"_index":445,"title":{"32":{"position":[[0,11]]}},"content":{},"keywords":{}}],["содерж",{"_index":327,"title":{},"content":{"28":{"position":[[608,8]]},"31":{"position":[[477,8]]},"38":{"position":[[804,8]]},"59":{"position":[[315,8]]}},"keywords":{}}],["созда",{"_index":81,"title":{},"content":{"4":{"position":[[179,9]]},"28":{"position":[[196,7]]},"36":{"position":[[301,9],[402,9]]},"37":{"position":[[654,7]]},"43":{"position":[[13,9]]},"45":{"position":[[1279,7],[2143,7]]},"47":{"position":[[189,7],[1102,7]]},"53":{"position":[[7,9]]},"67":{"position":[[47,7]]},"68":{"position":[[55,7],[188,9]]}},"keywords":{}}],["создава",{"_index":416,"title":{},"content":{"31":{"position":[[148,9]]},"37":{"position":[[702,9]]},"73":{"position":[[1107,9]]}},"keywords":{}}],["создан",{"_index":220,"title":{"35":{"position":[[0,8]]},"37":{"position":[[7,8]]},"43":{"position":[[0,8]]},"68":{"position":[[0,8]]}},"content":{"24":{"position":[[13,8]]},"58":{"position":[[115,8]]},"69":{"position":[[22,8],[260,8]]}},"keywords":{}}],["соответств",{"_index":631,"title":{},"content":{"54":{"position":[[68,13],[178,13]]},"69":{"position":[[1363,15]]},"73":{"position":[[1361,12],[4070,13]]},"74":{"position":[[1036,13],[1168,13]]},"75":{"position":[[767,15],[1858,15]]},"76":{"position":[[1037,15]]}},"keywords":{}}],["соответствен",{"_index":510,"title":{},"content":{"39":{"position":[[45,14]]}},"keywords":{}}],["соответствова",{"_index":470,"title":{},"content":{"36":{"position":[[167,15]]}},"keywords":{}}],["соста",{"_index":285,"title":{"26":{"position":[[0,6]]}},"content":{},"keywords":{}}],["софт",{"_index":23,"title":{},"content":{"1":{"position":[[126,5]]}},"keywords":{}}],["специфичн",{"_index":59,"title":{},"content":{"3":{"position":[[406,13],[555,14]]}},"keywords":{}}],["способ",{"_index":191,"title":{},"content":{"21":{"position":[[26,6]]}},"keywords":{}}],["сраз",{"_index":750,"title":{},"content":{"65":{"position":[[193,5]]}},"keywords":{}}],["стандартн",{"_index":15,"title":{},"content":{"1":{"position":[[20,11]]},"68":{"position":[[333,11]]}},"keywords":{}}],["стат",{"_index":31,"title":{},"content":{"3":{"position":[[8,6]]}},"keywords":{}}],["сторон",{"_index":53,"title":{},"content":{"3":{"position":[[331,7]]}},"keywords":{}}],["страниц",{"_index":387,"title":{"67":{"position":[[10,9]]}},"content":{"30":{"position":[[2716,10]]},"61":{"position":[[2248,10]]},"65":{"position":[[211,8]]},"67":{"position":[[38,8],[96,8]]},"68":{"position":[[111,8],[128,8]]},"69":{"position":[[13,8],[251,8],[1413,8]]},"75":{"position":[[1417,10]]}},"keywords":{}}],["сценар",{"_index":884,"title":{},"content":{"74":{"position":[[83,9]]}},"keywords":{}}],["счет",{"_index":508,"title":{},"content":{"38":{"position":[[2210,4]]}},"keywords":{}}],["счита",{"_index":869,"title":{},"content":{"73":{"position":[[4030,9]]}},"keywords":{}}],["так",{"_index":720,"title":{},"content":{"61":{"position":[[1314,5]]}},"keywords":{}}],["тариф",{"_index":532,"title":{},"content":{"42":{"position":[[719,7]]}},"keywords":{}}],["тест",{"_index":835,"title":{"73":{"position":[[25,8]]}},"content":{"73":{"position":[[1065,6],[1496,4],[1669,4],[1797,4],[2003,4],[2127,4],[2749,5],[3977,4],[4454,4],[4942,4],[5448,4]]},"74":{"position":[[45,7],[210,4]]},"75":{"position":[[485,4],[699,4],[928,4],[1223,4],[1604,4]]}},"keywords":{}}],["тестирован",{"_index":832,"title":{"72":{"position":[[9,12]]},"74":{"position":[[0,12]]},"75":{"position":[[0,12]]}},"content":{"73":{"position":[[3916,12]]},"74":{"position":[[5,12],[118,12]]}},"keywords":{}}],["товар",{"_index":633,"title":{},"content":{"54":{"position":[[129,6],[226,6],[1720,5]]},"61":{"position":[[1005,5]]}},"keywords":{}}],["точк",{"_index":482,"title":{"38":{"position":[[32,5]]}},"content":{"38":{"position":[[51,5]]}},"keywords":{}}],["точкерасчет",{"_index":292,"title":{},"content":{"27":{"position":[[38,11]]}},"keywords":{}}],["треб",{"_index":634,"title":{},"content":{"54":{"position":[[243,9]]},"58":{"position":[[54,9]]}},"keywords":{}}],["требован",{"_index":73,"title":{"42":{"position":[[8,11]]}},"content":{"4":{"position":[[66,10],[216,10]]},"5":{"position":[[64,10]]},"19":{"position":[[356,10]]},"24":{"position":[[1,10]]},"28":{"position":[[1,10]]},"30":{"position":[[1,10]]},"39":{"position":[[173,10]]},"41":{"position":[[1,10],[40,10],[479,10]]},"42":{"position":[[605,10],[977,10]]},"45":{"position":[[1,10]]},"47":{"position":[[111,10]]},"54":{"position":[[1,10]]},"68":{"position":[[159,11]]},"69":{"position":[[1,10]]}},"keywords":{}}],["требованиями"",{"_index":537,"title":{},"content":{"42":{"position":[[922,18]]}},"keywords":{}}],["требуем",{"_index":813,"title":{},"content":{"69":{"position":[[1403,9]]}},"keywords":{}}],["уведомлен",{"_index":339,"title":{},"content":{"30":{"position":[[390,11]]},"75":{"position":[[522,12],[950,11],[1245,11],[1734,12],[1914,11],[2022,11]]},"76":{"position":[[612,12]]}},"keywords":{}}],["угод",{"_index":783,"title":{},"content":{"67":{"position":[[213,5]]}},"keywords":{}}],["удобн",{"_index":189,"title":{},"content":{"21":{"position":[[1,7]]}},"keywords":{}}],["указа",{"_index":590,"title":{},"content":{"47":{"position":[[135,7]]},"54":{"position":[[103,10],[213,10]]},"58":{"position":[[142,7]]}},"keywords":{}}],["указыва",{"_index":46,"title":{"57":{"position":[[14,9]]}},"content":{"3":{"position":[[208,9]]},"41":{"position":[[51,9]]},"46":{"position":[[42,9]]}},"keywords":{}}],["улучш",{"_index":196,"title":{},"content":{"21":{"position":[[108,8]]}},"keywords":{}}],["уменьш",{"_index":178,"title":{},"content":{"20":{"position":[[1,9]]}},"keywords":{}}],["управлен",{"_index":158,"title":{},"content":{"19":{"position":[[77,10]]},"48":{"position":[[238,10]]}},"keywords":{}}],["упрост",{"_index":787,"title":{},"content":{"68":{"position":[[286,9]]}},"keywords":{}}],["уровн",{"_index":295,"title":{},"content":{"27":{"position":[[176,6]]},"47":{"position":[[1483,6]]}},"keywords":{}}],["услов",{"_index":168,"title":{},"content":{"19":{"position":[[296,7],[418,8]]},"41":{"position":[[325,7]]},"73":{"position":[[5022,8]]}},"keywords":{}}],["усложня",{"_index":753,"title":{},"content":{"65":{"position":[[321,9]]}},"keywords":{}}],["успешн",{"_index":712,"title":{},"content":{"60":{"position":[[811,7]]},"62":{"position":[[59,7]]},"75":{"position":[[551,7],[1763,7]]},"76":{"position":[[641,7]]}},"keywords":{}}],["учитыва",{"_index":89,"title":{},"content":{"4":{"position":[[361,9]]}},"keywords":{}}],["файл",{"_index":370,"title":{},"content":{"30":{"position":[[1799,4]]}},"keywords":{}}],["факторн",{"_index":113,"title":{},"content":{"5":{"position":[[180,9]]}},"keywords":{}}],["фасад",{"_index":786,"title":{},"content":{"68":{"position":[[267,6]]}},"keywords":{}}],["финальн",{"_index":874,"title":{},"content":{"73":{"position":[[4395,9],[4969,9]]}},"keywords":{}}],["фич",{"_index":16,"title":{},"content":{"1":{"position":[[32,5]]},"45":{"position":[[1428,4]]},"59":{"position":[[1726,4]]}},"keywords":{}}],["форм",{"_index":539,"title":{},"content":{"42":{"position":[[992,6]]}},"keywords":{}}],["формат",{"_index":453,"title":{},"content":{"32":{"position":[[135,7]]}},"keywords":{}}],["формирова",{"_index":294,"title":{},"content":{"27":{"position":[[153,11]]}},"keywords":{}}],["формирован",{"_index":192,"title":{"40":{"position":[[0,12]]}},"content":{"21":{"position":[[33,12],[247,12]]},"26":{"position":[[8,12]]},"27":{"position":[[753,12]]},"31":{"position":[[719,12],[1112,12]]},"37":{"position":[[843,12]]},"38":{"position":[[1222,12],[1498,12],[2121,12]]},"39":{"position":[[204,12]]},"57":{"position":[[69,12]]},"58":{"position":[[19,12]]},"59":{"position":[[733,12],[1009,12]]},"61":{"position":[[450,12]]},"73":{"position":[[1328,12]]},"75":{"position":[[83,12]]}},"keywords":{}}],["функц",{"_index":626,"title":{"52":{"position":[[18,7]]}},"content":{},"keywords":{}}],["функциона",{"_index":173,"title":{},"content":{"19":{"position":[[389,11]]},"41":{"position":[[72,10],[347,12]]},"65":{"position":[[367,12]]}},"keywords":{}}],["функционал",{"_index":525,"title":{},"content":{"42":{"position":[[156,11],[428,11]]}},"keywords":{}}],["функционалабизнес",{"_index":171,"title":{},"content":{"19":{"position":[[338,17]]}},"keywords":{}}],["функционалперманентн",{"_index":521,"title":{},"content":{"41":{"position":[[302,22]]}},"keywords":{}}],["хвата",{"_index":86,"title":{},"content":{"4":{"position":[[264,7]]}},"keywords":{}}],["хран",{"_index":413,"title":{"31":{"position":[[12,8]]}},"content":{"31":{"position":[[108,7]]},"64":{"position":[[18,8]]}},"keywords":{}}],["хранен",{"_index":306,"title":{},"content":{"27":{"position":[[449,8],[630,8]]},"31":{"position":[[802,8]]}},"keywords":{}}],["централизова",{"_index":157,"title":{},"content":{"19":{"position":[[59,17]]},"27":{"position":[[613,16],[714,16]]},"31":{"position":[[784,17]]},"38":{"position":[[2082,16]]},"62":{"position":[[333,15]]}},"keywords":{}}],["циклическ",{"_index":325,"title":{},"content":{"28":{"position":[[511,11]]}},"keywords":{}}],["част",{"_index":109,"title":{},"content":{"4":{"position":[[767,6]]},"19":{"position":[[332,5]]},"34":{"position":[[379,6]]},"52":{"position":[[52,6]]},"61":{"position":[[1369,5]]}},"keywords":{}}],["чего/к",{"_index":606,"title":{},"content":{"48":{"position":[[79,6]]}},"keywords":{}}],["чекбокс",{"_index":535,"title":{},"content":{"42":{"position":[[895,7]]}},"keywords":{}}],["чему?"",{"_index":607,"title":{},"content":{"48":{"position":[[86,12]]}},"keywords":{}}],["чита",{"_index":553,"title":{},"content":{"44":{"position":[[261,7]]}},"keywords":{}}],["чтен",{"_index":610,"title":{},"content":{"48":{"position":[[189,6]]},"54":{"position":[[13,6]]}},"keywords":{}}],["эд",{"_index":69,"title":{},"content":{"4":{"position":[[21,3]]},"5":{"position":[[21,3]]}},"keywords":{}}],["явля",{"_index":422,"title":{},"content":{"31":{"position":[[330,8],[1207,8]]},"34":{"position":[[370,8]]},"41":{"position":[[12,8],[263,9]]},"45":{"position":[[94,8]]},"47":{"position":[[75,8]]},"52":{"position":[[43,8]]},"61":{"position":[[380,8]]}},"keywords":{}}]],"pipeline":["stemmer","stemmer-ru"]} \ No newline at end of file diff --git a/lunr-index-1717675066773.json b/lunr-index-1717675066773.json new file mode 100644 index 0000000..09a8968 --- /dev/null +++ b/lunr-index-1717675066773.json @@ -0,0 +1 @@ +{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,637.414,1,317.933,2,701.977]],["content/0",[]],["keywords/0",[]],["title/1",[3,986.923]],["content/1",[1,4.819,3,12.812,4,8.931,5,4.521,6,12.127,7,8.931,8,5.736,9,8.348,10,3.666,11,10.641,12,9.662,13,8.931]],["keywords/1",[]],["title/2",[14,637.414,15,701.977,16,701.977]],["content/2",[0,9.166,1,5.62,14,11.267,15,12.408,16,12.408,17,9.166,18,7.063,19,2.622,20,5.441,21,11.504,22,8.473,23,11.504,24,7.919,25,10.095]],["keywords/2",[]],["title/3",[1,246.704,26,620.765,27,246.704,28,263.739,29,293.617]],["content/3",[]],["keywords/3",[]],["title/4",[30,828.357]],["content/4",[1,5.82,5,3.89,14,8.313,25,9.155,31,7.413,32,10.433,33,4.285,34,7.684,35,10.433,36,10.433,37,10.433,38,7.182,39,7.684,40,9.155,41,10.433,42,9.155,43,8.313,44,4.285,45,7.182,46,8.313,47,6.764,48,10.433,49,2.661,50,10.433,51,10.433]],["keywords/4",[]],["title/5",[52,828.357]],["content/5",[5,5.305,19,2.65,20,5.498,45,8.001,47,7.536,53,12.487,54,10.199,55,11.624,56,11.624,57,8.001,58,11.624,59,10.199,60,11.624,61,11.624,62,11.624]],["keywords/5",[]],["title/6",[63,774.223]],["content/6",[1,5.728,52,8.742,63,8.171,64,11.87,65,7.695,66,8.742,67,9.457,68,6.931,69,11.87,70,9.457,71,11.87,72,11.87,73,11.87,74,11.87]],["keywords/6",[]],["title/7",[63,774.223]],["content/7",[2,10.757,8,5.799,13,9.029,20,5.799,63,8.439,75,10.757,76,9.768,77,9.768,78,12.259,79,12.259,80,12.259,81,12.259]],["keywords/7",[]],["title/8",[82,986.923]],["content/8",[13,8.836,82,10.527,83,10.527,84,8.258,85,8.836,86,11.997,87,9.559,88,9.559,89,11.559,90,11.997,91,11.997,92,11.997,93,11.997]],["keywords/8",[]],["title/9",[1,246.704,49,158.296,52,457.191,94,427.313,95,494.61]],["content/9",[]],["keywords/9",[]],["title/10",[96,330.413]],["content/10",[45,9.248,96,3.947,97,8.249,98,13.435]],["keywords/10",[]],["title/11",[1,246.704,99,457.191,100,381.134,101,494.61,102,544.708]],["content/11",[1,5.355,5,3.97,19,3.072,31,4.18,33,3.081,34,5.524,45,5.163,53,6.582,66,5.524,77,5.977,84,5.163,89,5.977,99,5.524,100,6.538,101,5.977,102,6.582,103,7.501,104,5.977,105,5.163,106,6.582,107,7.501,108,6.903,109,7.501,110,7.501,111,7.501,112,6.903,113,7.501,114,7.501,115,7.842,116,7.501,117,10.648,118,3.299,119,7.501,120,5.977,121,6.582,122,7.501,123,7.501,124,7.33,125,7.501,126,7.501,127,4.38,128,7.501,129,5.524,130,7.842,131,7.501,132,7.501,133,7.501,134,6.582,135,5.524,136,7.501,137,7.501,138,4.38,139,6.582,140,5.163,141,5.977,142,5.524]],["keywords/11",[]],["title/12",[1,277.826,140,481.218,143,481.218,144,389.577]],["content/12",[1,5.655,19,2.65,31,7.93,70,9.261,84,8.001,108,7.536,112,7.536,121,10.199,130,8.561,134,10.199,141,9.261,142,8.561,144,6.478,145,11.624,146,11.624]],["keywords/12",[]],["title/13",[143,550.688,144,445.817,147,637.414]],["content/13",[1,3.881,5,2.481,18,7.104,19,1.517,31,3.709,44,2.733,52,4.901,65,4.314,84,4.581,94,4.581,96,1.955,106,5.839,108,7.501,112,4.314,115,4.901,130,7.193,140,6.723,141,5.302,142,7.193,143,4.581,144,7.103,147,10.816,148,9.767,149,4.619,150,5.302,151,6.655,152,4.581,153,6.655,154,4.901,155,11.57,156,5.302,157,6.655,158,9.767,159,6.655,160,4.901,161,7.782,162,5.839,163,5.839,164,6.655,165,5.839,166,2.196,167,4.901,168,6.655,169,5.839,170,5.302,171,4.901,172,4.314,173,6.655,174,6.655,175,5.839,176,7.782,177,4.901,178,6.655,179,6.655,180,6.655,181,9.767,182,5.839,183,3.404,184,6.655,185,6.655,186,6.655,187,6.655,188,6.655,189,6.655,190,5.302,191,6.655]],["keywords/13",[]],["title/14",[161,744.957,192,820.412]],["content/14",[]],["keywords/14",[]],["title/15",[143,481.218,144,389.577,177,514.866,193,613.422]],["content/15",[5,3.558,19,2.176,28,4.055,31,5.319,45,6.57,47,6.188,54,8.375,96,2.804,108,6.188,127,5.574,144,6.997,147,7.605,156,7.605,161,7.605,167,7.03,170,7.605,172,6.188,176,7.605,177,7.03,193,8.375,194,9.545,195,8.375,196,7.605,197,9.545,198,9.545,199,9.545,200,8.375,201,10.005,202,12.557,203,12.557,204,8.375,205,9.545,206,9.545,207,8.375]],["keywords/15",[]],["title/16",[192,820.412,208,934.966]],["content/16",[]],["keywords/16",[]],["title/17",[143,643.598,144,521.034]],["content/17",[1,4.536,11,5.704,12,5.179,19,2.188,31,5.349,43,7.648,47,4.214,49,3.214,94,6.608,96,1.91,101,7.648,105,4.475,108,6.223,115,4.787,120,5.179,130,4.787,142,8.406,144,6.36,156,5.179,162,5.704,165,5.704,167,4.787,172,4.214,176,5.179,177,9.282,183,3.325,196,5.179,200,5.704,204,5.704,207,5.704,209,9.599,210,6.5,211,6.5,212,6.5,213,6.5,214,6.5,215,6.5,216,12.603,217,6.5,218,6.5,219,6.5,220,11.413,221,9.599,222,6.5,223,6.5,224,6.5,225,6.5,226,5.704,227,6.5,228,6.5,229,6.5,230,5.179,231,6.5,232,6.5,233,6.5,234,1.18,235,6.5,236,6.5,237,6.5,238,10.015,239,3.991,240,6.5,241,6.5,242,6.5,243,6.5,244,6.5]],["keywords/17",[]],["title/18",[31,445.817,94,550.688,245,799.994]],["content/18",[1,2.677,17,7.85,19,2.656,20,3.185,31,7.144,49,3.926,57,4.636,70,5.366,94,4.636,95,5.366,96,1.978,105,4.636,108,7.553,115,4.96,118,2.962,160,4.96,166,2.223,170,5.366,172,6.387,183,3.444,226,5.91,238,8.645,246,5.366,247,6.735,248,12.82,249,6.735,250,3.444,251,11.65,252,6.735,253,6.735,254,6.735,255,6.735,256,11.65,257,6.735,258,9.852,259,9.852,260,6.735,261,5.91,262,6.735,263,2.29,264,6.735,265,6.735,266,6.735,267,9.852,268,6.735,269,6.735,270,9.852,271,3.933,272,6.735,273,6.735,274,6.735,275,6.735,276,2.591,277,5.91,278,6.735,279,6.735,280,6.735,281,6.735]],["keywords/18",[]],["title/19",[1,277.826,27,277.826,172,453.208,282,699.075]],["content/19",[1,3.699,4,6.855,5,3.47,7,6.855,19,2.122,27,3.699,31,6.882,34,6.855,49,3.917,163,8.167,167,9.095,234,1.69,283,9.307,284,9.307,285,9.307,286,9.307,287,9.307,288,9.307,289,7.872,290,9.307,291,9.307,292,9.307,293,9.307,294,9.307,295,9.307,296,9.307,297,9.307,298,9.307,299,9.307,300,9.307,301,9.307,302,9.307]],["keywords/19",[]],["title/20",[1,277.826,140,481.218,144,389.577,303,699.075]],["content/20",[1,6.193,5,4.001,9,9.322,10,3.245,19,2.447,34,7.905,95,8.552,100,6.59,112,6.958,118,4.721,140,7.388,304,5.489,305,10.733,306,8.552,307,9.418,308,10.733,309,10.733,310,10.733,311,10.733,312,9.418,313,8.552]],["keywords/20",[]],["title/21",[96,235.016,314,467.159,315,550.688]],["content/21",[]],["keywords/21",[]],["title/22",[316,146.378,317,545.977]],["content/22",[318,7.94,319,7.94,320,13.598]],["keywords/22",[]],["title/23",[263,382.452]],["content/23",[318,7.94,319,7.94,321,13.598]],["keywords/23",[]],["title/24",[322,656.788]],["content/24",[318,7.94,319,7.94,323,13.598]],["keywords/24",[]],["title/25",[324,512.71]],["content/25",[318,7.94,319,7.94,325,13.598]],["keywords/25",[]],["title/26",[27,371.574,324,426.207]],["content/26",[318,7.94,319,7.94,326,13.598]],["keywords/26",[]],["title/27",[27,317.933,316,125.247,327,467.159]],["content/27",[318,7.94,319,7.94,328,13.598]],["keywords/27",[]],["title/28",[10,282.677,329,545.977]],["content/28",[318,7.94,319,7.94,330,13.598]],["keywords/28",[]],["title/29",[331,545.977,332,498.59]],["content/29",[318,7.94,319,7.94,333,13.598]],["keywords/29",[]],["title/30",[27,317.933,331,467.159,332,426.613]],["content/30",[334,9.895,335,13.435,336,13.435,337,9.895]],["keywords/30",[]],["title/31",[338,799.994,339,550.688,340,799.994]],["content/31",[]],["keywords/31",[]],["title/32",[169,544.708,339,427.313,341,494.61,342,457.191,343,494.61]],["content/32",[19,1.974,20,4.096,24,5.961,38,5.961,234,2.603,339,9.199,341,6.9,343,9.375,344,8.66,345,8.66,346,7.599,347,7.599,348,8.66,349,8.66,350,11.766,351,11.766,352,11.766,353,7.599,354,8.66,355,8.66,356,6.378,357,8.66,358,8.66,359,8.66,360,8.66,361,8.66,362,8.66,363,8.66,364,6.9,365,6.378,366,8.099,367,8.66,368,6.378,369,11.766,370,6.9,371,7.599,372,8.66,373,6.9,374,6.9]],["keywords/32",[]],["title/33",[96,235.016,342,589.192,343,637.414]],["content/33",[5,4.027,19,2.462,20,3.621,27,3.042,33,3.144,99,5.638,138,6.308,183,3.915,234,2.273,239,4.7,250,3.915,316,1.198,339,5.269,368,7.956,375,6.099,376,6.099,377,6.717,378,10.014,379,7.655,380,5.638,381,4.751,382,6.632,383,5.269,384,5.269,385,6.431,386,6.099,387,4.47,388,8.617,389,6.099,390,5.638,391,7.655,392,7.655,393,7.655,394,7.655,395,7.655,396,7.956,397,6.717,398,7.655,399,3.621,400,7.655,401,7.655,402,6.717,403,6.717,404,6.099,405,5.638,406,5.269,407,7.655,408,7.655,409,5.269,410,6.099]],["keywords/33",[]],["title/34",[96,235.016,339,550.688,342,589.192]],["content/34",[33,3.791,68,5.39,99,6.798,138,5.39,183,4.721,234,1.676,316,1.445,342,6.798,364,7.355,368,6.798,375,7.355,376,7.355,377,8.1,380,6.798,381,4.06,382,7.54,383,6.354,384,6.354,385,5.809,386,7.355,387,7.172,396,6.798,399,4.366,404,10.997,406,8.454,411,9.23,412,9.23,413,9.23,414,6.354,415,9.785,416,9.23,417,9.23,418,8.1,419,9.23,420,8.1]],["keywords/34",[]],["title/35",[63,774.223]],["content/35",[]],["keywords/35",[]],["title/36",[19,213.123,421,934.966]],["content/36",[19,2.104,22,9.045,33,3.791,38,8.454,66,6.798,89,7.355,97,5.667,100,5.667,234,2.671,315,8.454,341,9.785,378,9.045,381,4.06,409,6.354,422,6.354,423,8.1,424,9.23,425,13.802,426,9.23,427,9.23,428,9.23,429,9.23,430,9.23,431,9.785,432,9.23,433,6.354,434,9.23,435,9.23,436,7.355,437,8.1,438,5.39]],["keywords/36",[]],["title/37",[304,409.157,315,550.688,439,799.994]],["content/37",[5,5.239,38,9.673,68,6.65,195,9.992,234,2.068,312,9.992,314,8.206,440,11.387,441,11.387,442,11.387,443,11.387,444,11.387,445,11.387,446,6.992,447,9.992,448,8.387]],["keywords/37",[]],["title/38",[22,688.599,315,643.598]],["content/38",[0,7.943,5,3.717,9,6.863,10,3.014,44,5.306,175,8.748,234,2.602,304,5.099,313,7.943,385,4.715,420,8.748,449,9.969,450,8.748,451,9.969,452,5.889,453,9.969,454,5.682,455,9.969,456,9.969,457,8.748,458,6.121,459,9.969,460,9.969,461,6.863,462,9.969,463,7.342,464,8.748,465,9.969]],["keywords/38",[]],["title/39",[466,799.994,467,589.192,468,364.679]],["content/39",[10,3.789,13,9.231,18,7.695,96,3.682,97,7.695,124,8.628,315,8.628,467,9.231,468,5.713,469,10.998]],["keywords/39",[]],["title/40",[316,125.247,470,409.157,471,550.688]],["content/40",[]],["keywords/40",[]],["title/41",[20,330.657,316,109.447,470,357.542,471,481.218]],["content/41",[20,6.688,22,8.473,129,8.473,149,5.441,316,2.397,470,7.83,471,10.994,472,10.415,473,11.504]],["keywords/41",[]],["title/42",[415,557.005,474,699.075,475,699.075,476,699.075]],["content/42",[]],["keywords/42",[]],["title/43",[96,330.413]],["content/43",[19,1,28,3.009,29,6.209,33,2.909,44,1.802,49,4.393,97,2.694,166,2.939,183,2.244,234,1.286,239,2.694,263,2.408,276,2.725,314,2.562,316,1.109,327,2.562,381,1.93,385,2.076,387,2.562,399,2.076,410,5.643,415,8.142,464,3.85,470,2.244,477,2.694,478,4.962,479,4.388,480,3.232,481,3.35,482,2.562,483,6.451,484,3.777,485,2.244,486,2.445,487,2.244,488,2.244,489,8.904,490,7.082,491,3.481,492,3.622,493,3.481,494,2.562,495,3.232,496,2.445,497,2.694,498,2.244,499,2.445,500,3.232,501,2.445,502,3.232,503,2.694,504,4.765,505,2.694,506,2.34,507,4.388,508,4.388,509,2.845,510,3.496,511,3.232,512,4.388,513,4.388,514,4.388,515,2.694,516,2.34,517,3.232,518,3.85,519,2.076,520,3.232,521,3.232,522,7.082,523,4.388,524,1.93,525,4.388,526,3.85,527,4.388,528,4.388,529,6.558,530,4.388,531,3.85,532,3.021,533,4.388,534,2.845,535,3.232,536,4.388]],["keywords/43",[]],["title/44",[68,467.159,316,125.247,317,467.159]],["content/44",[]],["keywords/44",[]],["title/45",[316,125.247,537,799.994,538,393.158]],["content/45",[5,5.515,33,5.091,399,5.863,452,5.65,454,5.452,461,8.532,539,12.395,540,12.395,541,12.395,542,9.876]],["keywords/45",[]],["title/46",[44,229.293,234,101.357,399,264.04,446,342.74,538,274.344,543,558.233]],["content/46",[5,2.873,8,5.134,9,5.305,10,3.282,19,1.757,20,5.134,44,3.166,87,6.141,234,2.841,304,3.942,329,4.501,370,6.141,374,6.141,399,5.134,402,6.763,422,7.472,446,4.732,448,5.676,452,3.513,454,4.774,458,4.732,472,5.676,538,7.065,544,7.707,545,7.707,546,7.707,547,6.763,548,7.707,549,9.524,550,10.011,551,7.707,552,7.707,553,7.707,554,7.707,555,7.707,556,6.763,557,6.763,558,9.524,559,6.763,560,6.763,561,7.707,562,7.707,563,7.707,564,7.707,565,7.707]],["keywords/46",[]],["title/47",[96,235.016,549,701.977,550,637.414]],["content/47",[9,5.417,10,3.842,33,4.524,65,5.102,67,6.27,138,6.432,234,2.307,246,6.27,250,4.025,316,1.232,381,3.461,382,4.832,384,5.417,388,7.582,396,8.112,399,6.01,404,8.776,410,8.776,538,7.729,550,10.124,566,6.905,567,7.87,568,7.87,569,7.87,570,7.87,571,13.764,572,9.665,573,11.014,574,13.764,575,11.014,576,7.87,577,7.87,578,7.87]],["keywords/47",[]],["title/48",[234,145.253,263,272.03,579,518.633]],["content/48",[]],["keywords/48",[]],["title/49",[580,896.153]],["content/49",[49,4.543,150,8.173,201,5.673,263,4.089,271,4.158,316,1.115,317,4.158,405,5.244,409,4.901,482,4.158,519,3.368,579,4.616,581,6.247,582,4.371,583,5.244,584,8.856,585,6.247,586,6.247,587,6.247,588,6.247,589,5.244]],["keywords/49",[]],["title/50",[477,574.045,579,606.136]],["content/50",[]],["keywords/50",[]],["title/51",[38,427.313,373,494.61,374,494.61,538,305.076,579,402.44]],["content/51",[8,4.515,17,10.005,66,7.03,67,7.605,96,2.804,250,6.422,263,4.27,316,1.966,317,7.332,347,11.018,375,11.181,376,7.605,405,7.03,497,5.86,503,5.86,538,6.171,589,10.335,590,12.557,591,9.545,592,8.375,593,12.557,594,9.545,595,8.375,596,5.319,597,8.375]],["keywords/51",[]],["title/52",[27,277.826,96,205.368,468,318.675,477,429.214]],["content/52",[10,2.024,19,1.526,29,5.491,49,4.362,118,2.945,149,3.166,166,2.209,234,1.215,250,3.424,263,3.948,276,2.576,316,1.048,329,3.909,452,3.052,468,4.472,480,4.93,481,3.166,482,3.909,483,5.706,484,3.57,485,3.424,486,5.466,487,3.424,488,5.017,491,3.29,492,3.424,493,3.29,494,3.909,495,4.93,496,3.731,497,4.11,498,3.424,499,3.731,500,4.93,501,3.731,502,4.93,559,5.874,579,4.34,598,5.827,599,5.334,600,4.608,601,3.731,602,5.334,603,4.34,604,4.93,605,4.11,606,4.11,607,4.11,608,4.34,609,6.694,610,5.334,611,4.11,612,5.874]],["keywords/52",[]],["title/53",[68,362.498,234,112.711,519,293.617,579,402.44,613,544.708]],["content/53",[5,3.137,10,2.544,19,1.509,27,1.606,28,4.563,29,1.911,30,2.976,40,3.545,49,4.369,65,2.619,68,2.359,96,1.945,100,2.481,118,1.777,166,1.333,234,1.95,263,2.861,276,3.238,304,2.066,314,3.867,316,0.633,327,2.359,329,2.359,422,2.781,448,2.976,452,3.836,454,1.777,457,3.545,468,3.836,481,3.132,482,3.867,483,4.782,485,3.387,486,3.69,487,4.303,488,4.977,491,3.254,492,3.387,493,3.254,497,2.481,498,2.066,504,2.632,519,5.08,524,1.777,538,1.986,582,4.066,583,2.976,588,3.545,596,2.251,598,5.554,599,3.219,600,2.781,601,4.689,602,5.276,605,2.481,606,2.481,607,2.481,613,3.545,614,6.622,615,4.04,616,4.04,617,6.309,618,5.276,619,5.811,620,5.811,621,4.04,622,3.545,623,3.545,624,3.219,625,7.383,626,3.545,627,3.545,628,2.619,629,3.545,630,3.545,631,3.545,632,3.545,633,2.619,634,3.545,635,3.545,636,3.545,637,2.359,638,4.04,639,4.04,640,4.04,641,4.04,642,3.545]],["keywords/53",[]],["title/54",[263,272.03,399,378.391,643,637.414]],["content/54",[8,5.077,19,2.447,20,5.077,234,1.949,263,5.045,316,2.12,324,4.893,365,7.905,380,7.905,381,4.721,399,6.406,452,4.893,463,9.974,557,11.883,643,8.552,644,10.733,645,10.733,646,10.733,647,10.733]],["keywords/54",[]],["title/55",[44,287.144,234,126.929,322,408.227,454,307.493]],["content/55",[]],["keywords/55",[]],["title/56",[27,371.574,96,274.667]],["content/56",[8,1.372,19,1.142,20,1.372,28,3.774,29,4.597,33,1.191,42,2.545,49,4.393,83,2.545,85,2.136,118,2.203,135,4.869,138,1.694,149,1.372,154,2.136,166,4.08,172,1.88,183,4.025,263,1.703,276,3.028,289,3.525,316,0.454,327,1.694,381,1.276,382,1.781,385,3.127,387,2.925,414,1.997,418,2.545,438,1.694,463,2.136,468,2.283,481,2.369,483,4.777,484,2.671,485,1.483,486,2.791,487,1.483,488,1.483,491,2.462,492,2.562,493,3.249,494,1.694,496,1.616,498,1.483,499,1.616,501,1.616,504,4.377,505,1.781,506,1.547,515,1.781,516,2.671,519,3.722,520,2.136,521,3.689,524,3.461,529,3.689,532,1.997,534,6.755,535,2.136,538,1.425,566,2.545,582,1.781,596,1.616,598,2.283,601,1.616,603,1.88,605,3.075,606,1.781,607,1.781,608,1.88,617,1.88,628,1.88,633,1.88,637,1.694,642,2.545,648,5.556,649,2.901,650,2.901,651,2.311,652,2.901,653,2.901,654,2.901,655,2.311,656,2.901,657,3.991,658,2.901,659,2.901,660,1.997,661,2.136,662,2.136,663,2.136,664,1.88,665,2.136,666,2.311,667,2.136,668,2.136,669,2.311,670,2.311,671,2.311,672,2.545,673,2.901,674,2.136,675,4.395,676,3.448,677,3.689,678,4.395,679,2.545,680,2.545,681,2.901,682,2.901,683,2.545,684,2.901,685,2.311,686,2.311,687,1.694,688,2.545,689,4.395,690,4.395,691,2.901,692,2.901,693,2.901,694,3.991,695,3.991,696,2.901,697,2.136,698,2.901,699,2.901,700,2.901,701,2.901,702,2.901,703,2.901,704,2.901,705,2.901,706,2.901,707,2.901,708,2.901,709,2.901,710,2.901]],["keywords/56",[]],["title/57",[39,514.866,322,408.227,446,429.214,604,514.866]],["content/57",[8,2.461,10,2.451,19,1.848,39,3.832,44,4.091,49,4.418,65,3.373,118,2.289,234,2.042,263,1.769,271,4.734,276,3.832,316,0.815,322,6.566,334,5.97,368,5.97,370,6.459,385,2.461,387,3.038,414,3.581,422,3.581,446,4.977,447,4.565,448,3.832,452,3.695,454,3.566,467,3.832,468,3.695,478,2.899,538,2.557,558,4.565,598,2.372,603,3.373,604,8.281,610,4.146,711,5.203,712,4.565,713,5.203,714,3.832,715,5.203,716,5.203,717,8.107,718,4.565,719,5.203,720,5.203,721,5.203,722,5.203,723,9.959,724,7.113,725,7.113,726,8.107,727,5.203,728,5.203,729,8.107,730,8.107,731,5.203,732,5.203,733,5.203,734,5.203,735,5.203,736,5.203,737,5.203,738,5.203]],["keywords/57",[]],["title/58",[59,986.923]],["content/58",[8,5.555,10,3.551,127,6.859,149,5.555,289,6.263,322,8.363,739,11.745,740,11.745,741,9.358,742,11.745,743,11.745,744,11.745,745,11.745,746,11.745,747,11.745]],["keywords/58",[]],["title/59",[10,241.869,234,145.253,329,467.159]],["content/59",[]],["keywords/59",[]],["title/60",[10,168.775,24,384.268,234,101.357,263,189.821,356,411.136,748,558.233]],["content/60",[10,3.876,24,8.825,263,4.359,329,7.486,452,5.844,511,9.442,611,7.871,749,12.82]],["keywords/60",[]],["title/61",[96,330.413]],["content/61",[10,2.572,19,1.262,28,2.352,29,4.899,46,4.412,49,4.38,57,3.811,118,2.435,149,2.619,166,3.419,183,2.832,234,1.005,263,3.952,276,2.131,452,2.524,463,4.078,468,3.878,477,3.4,481,2.619,483,5.091,484,2.953,485,4.351,486,4.74,487,2.832,488,4.351,491,2.721,492,2.832,493,2.721,494,3.233,496,3.086,498,4.351,499,3.086,501,3.086,504,4.619,505,3.4,506,2.953,510,4.412,515,3.4,516,4.536,524,2.435,534,3.59,582,3.4,596,3.086,597,4.859,598,2.524,605,3.4,606,3.4,607,3.4,608,3.59,617,5.515,628,3.59,637,3.233,648,2.953,660,3.811,661,4.078,662,4.078,663,4.078,664,5.515,665,4.078,666,4.412,667,4.078,668,4.078,669,4.412,670,4.412,671,4.412,750,5.537,751,5.537,752,4.859,753,4.859]],["keywords/61",[]],["title/62",[10,211.357,263,237.713,624,557.005,754,557.005]],["content/62",[5,3.355,8,3.393,10,4.12,18,2.737,19,1.016,27,3.577,28,4.382,29,2.109,30,3.283,43,3.552,49,4.21,65,2.89,68,4.189,76,3.552,104,3.552,105,3.069,118,1.961,127,7.051,129,3.283,149,2.109,166,1.471,190,3.552,234,2.052,263,3.507,276,1.715,304,2.28,313,7.171,316,0.698,329,6.6,452,3.27,468,4.103,481,2.109,482,2.603,483,4.423,485,3.669,486,5.747,487,4.603,488,2.28,491,2.191,492,2.28,493,2.191,497,2.737,498,4.603,504,1.772,511,3.283,519,3.393,582,2.737,596,2.484,598,3.27,601,2.484,605,2.737,606,2.737,607,2.737,611,7.414,617,2.89,618,5.715,619,3.912,620,3.912,622,3.912,623,6.294,624,3.552,625,7.897,626,3.912,627,3.912,628,2.89,629,3.912,630,3.912,631,3.912,632,3.912,712,3.912,755,4.458,756,3.912,757,4.458,758,3.912,759,4.458,760,3.552,761,4.458,762,4.458,763,4.458,764,4.404,765,4.458,766,4.458,767,3.912,768,3.552,769,3.912]],["keywords/62",[]],["title/63",[27,446.989]],["content/63",[4,6.051,5,4.231,7,6.051,10,2.484,19,1.873,49,4.206,166,4.628,276,3.161,316,1.286,504,3.265,524,5.719,697,6.051,754,10.359,764,5.044,770,8.216,771,8.216,772,8.216,773,8.216,774,8.216,775,8.216,776,8.216,777,8.216,778,8.216,779,8.216,780,8.216,781,8.216,782,8.216,783,8.216,784,8.216,785,8.216,786,8.216,787,8.216,788,8.216,789,8.216,790,8.216,791,8.216,792,7.209,793,6.051,794,8.216]],["keywords/63",[]],["title/64",[190,744.957,754,744.957]],["content/64",[5,3.491,8,1.795,10,3.139,19,1.433,20,3.808,24,2.612,27,1.508,28,4.411,29,5.606,49,4.378,88,3.023,100,2.329,105,2.612,166,3.694,263,1.29,271,2.216,276,2.419,289,2.023,316,1.261,324,1.729,327,2.216,329,2.216,409,2.612,414,2.612,438,2.216,452,1.729,472,2.794,481,2.974,483,5.5,484,3.353,485,1.94,487,1.94,488,1.94,491,3.09,492,3.216,493,3.957,494,2.216,496,2.114,498,3.216,499,2.114,501,2.114,504,3.722,505,2.329,506,2.023,511,5.93,516,2.023,519,2.974,520,2.794,521,2.794,524,2.766,529,2.794,535,2.794,542,3.023,583,2.794,598,1.729,608,2.46,611,3.86,637,2.216,648,2.023,660,2.612,672,3.329,675,3.329,676,4.328,677,4.631,686,3.023,687,2.216,688,3.329,689,5.517,690,3.329,764,2.329,767,3.329,768,3.023,769,5.517,792,3.329,795,3.794,796,3.794,797,3.329,798,3.794,799,3.794,800,3.794,801,4.328,802,3.329,803,3.329,804,3.329,805,3.329,806,3.329,807,4.631,808,3.023,809,3.329,810,3.329,811,3.329,812,3.329,813,3.794,814,3.794,815,3.794,816,3.794,817,3.794,818,3.794,819,3.794,820,3.794,821,3.794,822,3.794,823,3.794,824,3.794,825,3.794,826,3.794,827,3.794]],["keywords/64",[]],["title/65",[10,211.357,100,429.214,139,613.422,306,557.005]],["content/65",[10,3.154,19,2.378,27,5.286,49,3.734,316,2.293,322,8.551,422,7.182,458,6.406,470,5.336,509,6.764,601,5.814,676,7.182,793,7.684,828,10.433,829,9.155,830,9.155,831,10.433,832,9.155,833,13.302,834,10.433]],["keywords/65",[]],["title/66",[234,169.759,452,426.207]],["content/66",[]],["keywords/66",[]],["title/67",[316,146.378,835,934.966]],["content/67",[5,3.499,10,3.754,84,8.548,118,4.128,149,4.439,152,6.46,234,1.704,271,7.251,316,1.944,356,6.912,378,9.145,380,6.912,381,6.121,385,4.439,387,5.48,388,6.46,431,7.478,436,9.894,470,4.8,471,6.46,531,8.235,542,7.478,572,8.235,637,5.48,836,9.385,837,9.385,838,7.478,839,9.385,840,9.385,841,9.385,842,9.385,843,9.385]],["keywords/67",[]],["title/68",[96,274.667,381,411.251]],["content/68",[10,4.05,33,4.332,85,5.451,182,6.495,183,3.786,234,1.915,316,2.217,378,5.451,381,4.64,382,8.693,383,8.459,384,9.22,385,7.164,386,5.898,387,6.159,388,7.261,438,4.322,470,3.786,471,5.095,478,4.125,651,8.404,838,8.404,844,12.289,845,10.548,846,7.402,847,7.402,848,12.289,849,10.548,850,6.495,851,7.402,852,7.402,853,7.402,854,7.402,855,7.402,856,7.402,857,7.402,858,7.402]],["keywords/68",[]],["title/69",[316,109.447,468,318.675,477,429.214,752,613.422]],["content/69",[28,2.527,29,5.12,44,2.443,49,4.4,118,2.616,149,2.814,166,2.965,230,4.74,234,1.965,239,3.652,250,3.042,263,4.101,276,2.289,316,0.931,405,4.381,458,3.652,468,4.095,478,3.315,480,4.381,481,2.814,482,3.474,483,5.32,484,3.172,485,3.042,486,5.006,487,3.042,488,4.595,491,2.923,492,3.042,493,2.923,494,3.474,495,4.381,496,3.315,497,3.652,498,3.042,499,3.315,500,4.381,501,3.315,502,4.381,503,3.652,504,3.57,505,3.652,506,3.172,515,3.652,516,3.172,517,4.381,598,5.498,599,4.74,600,4.095,601,3.315,602,4.74,603,3.856,604,4.381,605,3.652,606,3.652,607,3.652,611,3.652,859,5.948,860,5.948,861,5.948]],["keywords/69",[]],["title/70",[316,146.378,364,744.957]],["content/70",[12,7.943,44,5.306,49,4.279,166,3.29,234,1.81,289,6.889,316,1.561,322,7.544,454,5.682,601,5.556,741,7.943,829,8.748,830,8.748,832,8.748,862,9.969,863,11.336,864,9.969,865,9.969,866,9.969,867,8.748]],["keywords/70",[]],["title/71",[27,277.826,96,205.368,314,408.227,316,109.447]],["content/71",[4,3.146,19,0.974,27,1.697,28,2.944,29,3.277,49,4.389,76,3.403,138,2.494,166,3.649,171,3.146,234,1.826,239,2.622,250,3.544,271,2.494,276,3.364,316,0.669,327,4.046,366,2.94,381,1.879,382,2.622,383,2.94,385,2.02,399,2.02,470,2.184,478,3.861,480,3.146,481,3.277,482,2.494,483,4.296,484,2.278,485,2.184,486,2.38,487,2.184,488,2.184,491,3.405,492,3.544,493,3.405,495,3.146,496,2.38,497,2.622,498,2.184,499,2.38,500,3.146,501,2.38,502,3.146,503,2.622,504,4.394,506,2.278,515,2.622,516,3.695,517,3.146,518,3.748,519,3.277,524,3.845,598,3.159,600,2.94,634,3.748,635,7.671,636,3.748,648,3.695,674,3.146,697,6.439,741,3.403,868,4.271,869,8.742,870,3.748,871,3.748,872,4.271,873,6.08,874,3.403,875,6.08,876,3.748,877,3.748,878,6.929,879,4.271,880,3.748,881,6.929,882,6.929,883,6.929,884,6.929,885,4.271,886,4.271,887,4.271,888,4.271,889,4.271,890,4.271,891,4.271,892,4.271,893,4.271,894,4.271,895,4.271]],["keywords/71",[]],["title/72",[149,330.657,316,109.447,365,514.866,366,481.218]],["content/72",[118,5.113,124,8.001,149,5.498,246,9.261,316,2.228,356,8.561,365,8.561,366,9.796,373,9.261,397,10.199,714,8.561,768,9.261,896,10.199,897,11.624,898,11.624]],["keywords/72",[]],["title/73",[96,330.413]],["content/73",[10,1.65,19,1.917,28,4.9,49,4.336,57,3.756,96,1.603,138,4.911,152,3.756,166,3.807,171,4.018,196,4.347,234,1.863,239,5.164,250,4.302,271,3.186,316,1.607,366,3.756,381,2.4,382,5.164,383,3.756,384,3.756,385,2.581,389,4.347,403,4.788,406,3.756,433,3.756,458,3.35,470,2.791,478,4.687,481,3.978,482,4.911,503,6.301,504,5.629,506,6.15,515,7.081,516,6.15,517,8.494,532,3.756,547,4.788,714,4.018,870,4.788,871,10.12,874,4.347,896,4.788,899,5.456,900,5.456,901,8.411,902,5.456,903,5.456,904,5.456,905,5.456,906,5.456,907,5.456,908,5.456]],["keywords/73",[]],["title/74",[909,896.153]],["content/74",[28,6.465,49,4.406,96,2.414,234,1.492,239,5.044,316,1.286,388,5.655,423,7.209,478,4.578,503,5.044,592,7.209,595,7.209,648,4.381,664,5.326,756,7.209,910,8.216,911,8.216,912,8.216,913,8.216,914,8.216,915,10.359,916,8.216,917,7.209,918,7.209,919,8.216,920,11.349,921,6.546,922,6.546,923,8.216,924,8.216]],["keywords/74",[]],["title/75",[234,126.929,390,514.866,611,429.214,909,557.005]],["content/75",[28,5.651,47,6.764,49,4.348,166,4.39,234,1.894,289,7.093,556,9.155,611,6.406,677,9.797,921,8.313,922,8.313,925,10.433,926,9.155,927,9.155,928,10.433]],["keywords/75",[]],["title/76",[5,231.42,234,112.711,331,362.498,332,331.036,461,427.313]],["content/76",[]],["keywords/76",[]],["title/77",[580,896.153]],["content/77",[39,6.634,49,4.531,316,1.41,317,5.26,331,5.26,332,4.804,470,4.607,584,10.041,929,7.904,930,7.904,931,7.177,932,7.904]],["keywords/77",[]],["title/78",[127,408.227,332,372.796,337,514.866,764,429.214]],["content/78",[8,4.477,27,3.761,33,3.887,118,4.163,124,8.595,127,7.292,149,4.477,234,2.267,304,4.841,316,1.482,331,7.292,332,6.659,337,10.292,371,8.305,389,7.541,436,7.541,461,6.515,538,4.651,687,5.527,764,5.811,797,8.305,933,9.464,934,9.464,935,9.464,936,12.487,937,9.464,938,9.464,939,9.464,940,9.464,941,9.464,942,9.464]],["keywords/78",[]],["title/79",[96,330.413]],["content/79",[7,3.662,19,1.133,49,4.518,166,3.937,276,3.01,316,0.778,317,2.903,334,3.662,337,5.762,470,2.543,504,3.844,524,4.255,584,7.124,596,2.771,598,5.438,674,5.762,695,6.234,915,3.962,930,4.363,931,6.234,932,6.865,943,4.972,944,4.972,945,4.972,946,4.363,947,4.363,948,6.865,949,6.865,950,4.363,951,4.363,952,4.363,953,6.865,954,4.972,955,4.972,956,4.972,957,7.824,958,3.962,959,7.824,960,4.972,961,4.972,962,4.972,963,4.972,964,4.972,965,4.972,966,4.972,967,4.972]],["keywords/79",[]],["title/80",[687,545.977,968,744.957]],["content/80",[10,3.276,19,2.47,27,4.307,88,8.635,124,7.46,127,7.956,250,5.543,331,7.956,332,7.266,469,9.509,637,6.328,687,7.956,764,6.654,838,8.635,915,8.635,968,10.856,969,10.837,970,10.837,971,10.837]],["keywords/80",[]],["title/81",[331,467.159,332,426.613,477,491.175]],["content/81",[19,2.335,44,4.207,75,8.988,152,7.051,250,6.723,304,5.239,314,7.676,331,8.477,332,7.741,381,4.505,433,7.051,454,4.505,458,6.289,509,6.64,687,7.676,850,8.988,874,8.161,929,8.988,972,10.243,973,11.535,974,10.243,975,10.243]],["keywords/81",[]],["title/82",[96,330.413]],["content/82",[5,1.76,8,2.233,10,1.427,19,1.076,33,3.084,44,3.084,49,4.331,68,2.757,97,2.898,104,3.761,112,3.06,152,3.25,166,4.088,261,4.142,276,2.889,304,2.414,314,4.385,316,1.176,332,2.517,334,6.886,381,2.076,385,2.233,433,3.25,454,3.303,461,3.25,472,3.477,477,4.61,478,4.185,503,4.61,504,2.984,509,3.06,519,2.233,524,3.303,589,3.477,598,5.921,600,3.25,601,4.185,603,3.06,612,4.142,648,4.004,674,3.477,687,5.46,694,5.983,697,5.53,876,6.589,877,4.142,880,4.142,931,5.983,946,4.142,947,4.142,948,4.142,949,6.589,950,4.142,951,4.142,952,4.142,953,4.142,958,3.761,968,3.761,976,4.721,977,4.721,978,4.721,979,4.721,980,4.721,981,6.589,982,4.721,983,6.589,984,4.142,985,6.589,986,9.351,987,4.721,988,6.589,989,4.721,990,4.721,991,4.721,992,4.721,993,4.721,994,4.142,995,4.721,996,4.721,997,4.721,998,4.721,999,3.06,1000,4.721]],["keywords/82",[]],["title/83",[44,254.978,234,112.711,306,494.61,454,273.048,1001,494.61]],["content/83",[44,5.453,454,5.839,509,8.607,973,11.649,1001,10.578]],["keywords/83",[]],["title/84",[96,330.413]],["content/84",[44,3.828,49,4.394,166,4.079,234,1.692,276,2.404,304,3.195,316,1.935,433,4.3,438,3.648,454,4.099,458,3.835,504,5.255,524,2.748,526,5.481,598,5.082,601,5.194,603,4.05,694,7.426,875,5.481,958,4.977,981,5.481,983,5.481,984,8.178,985,5.481,986,10.846,988,8.178,994,9.782,1001,4.977,1002,6.247,1003,6.247,1004,6.247,1005,5.481,1006,9.32,1007,9.32,1008,4.601,1009,9.32,1010,6.247,1011,6.247,1012,5.481,1013,5.481,1014,5.481,1015,6.247,1016,6.247,1017,6.247]],["keywords/84",[]],["title/85",[234,126.929,324,318.675,399,330.657,643,557.005]],["content/85",[]],["keywords/85",[]],["title/86",[580,896.153]],["content/86",[49,4.553,87,6.017,150,6.017,201,6.017,263,2.568,316,1.182,317,4.41,324,4.877,519,3.572,581,6.626,584,9.151,585,6.626,586,6.626,801,5.198,1018,7.551]],["keywords/86",[]],["title/87",[316,97.187,324,282.978,538,305.076,1019,620.765,1020,620.765]],["content/87",[271,7.402,316,1.984,324,5.778,409,8.725,519,5.995,538,6.229,587,11.122,1021,10.099,1022,12.675]],["keywords/87",[]],["title/88",[314,545.977,324,426.207]],["content/88",[230,10.454,250,6.71,324,5.981,467,9.663,468,5.981,1023,11.513]],["keywords/88",[]],["title/89",[96,330.413]],["content/89",[8,1.535,18,1.992,19,1.257,28,2.343,29,4.494,33,3.483,46,2.585,49,4.386,57,3.796,97,4.415,118,1.427,138,1.895,160,2.39,166,3.828,234,0.589,263,1.875,276,2.767,289,1.73,316,0.863,324,3.278,346,2.847,381,1.427,385,3.401,390,2.39,396,2.39,399,1.535,438,1.895,446,1.992,468,2.514,481,2.608,483,4.67,484,2.941,485,2.82,487,2.82,488,2.82,491,2.71,492,2.82,493,2.71,494,3.22,496,3.073,498,2.82,499,3.073,501,3.073,504,4.379,505,3.386,506,3.835,516,3.835,524,3.73,582,3.386,583,4.061,596,1.808,598,3.278,605,1.992,606,1.992,607,1.992,608,3.575,617,2.104,628,2.104,633,2.104,637,3.22,648,2.941,660,3.796,661,2.39,662,2.39,663,2.39,665,2.39,667,2.39,668,2.39,753,2.847,801,7.585,802,4.839,803,2.847,804,2.847,805,6.31,806,4.839,807,8.116,808,5.729,809,4.839,810,4.839,811,4.839,812,4.839,867,2.847,917,2.847,918,2.847,927,2.847,999,3.575,1023,2.847,1024,7.571,1025,3.245,1026,3.245,1027,4.394,1028,2.847,1029,2.847,1030,2.847,1031,3.245,1032,2.847,1033,2.847,1034,2.847,1035,3.245,1036,3.245,1037,3.245,1038,3.245]],["keywords/89",[]],["title/90",[909,896.153]],["content/90",[33,3.503,47,5.529,49,4.364,166,4.702,234,1.548,289,8.208,324,3.888,353,10.217,524,6.266,801,5.87,807,8.575,921,6.795,922,6.795,926,7.483,1024,6.795,1027,9.277,1039,8.528,1040,11.643,1041,8.528,1042,8.528,1043,8.528,1044,8.528]],["keywords/90",[]],["title/91",[234,145.253,1045,799.994,1046,550.688]],["content/91",[]],["keywords/91",[]],["title/92",[263,237.713,1047,699.075,1048,699.075,1049,514.866]],["content/92",[19,1.514,28,1.98,29,2.204,30,1.377,33,1.394,49,4.412,77,1.49,85,3.432,96,0.549,118,1.493,120,1.49,127,1.982,129,1.377,135,5.982,149,2.204,166,4.522,171,1.377,183,0.956,234,0.616,263,1.584,276,0.72,304,0.956,307,1.641,316,0.73,322,1.982,387,4.743,406,1.287,414,5.591,431,1.49,437,1.641,446,1.148,450,1.641,452,0.852,454,0.822,478,2.597,481,0.884,483,2.29,484,0.997,485,2.383,486,1.891,487,0.956,488,0.956,491,0.919,492,0.956,493,2.815,494,1.092,496,1.042,498,2.93,499,5.895,501,4.141,504,4.345,505,2.861,506,3.963,509,1.212,510,1.49,515,2.861,516,5.201,524,4.809,534,5.265,560,1.641,582,2.084,596,1.042,608,1.212,610,1.49,617,1.212,618,1.49,628,1.212,633,1.212,637,1.092,648,4.331,657,4.564,660,1.287,661,1.377,662,1.377,663,1.377,664,3.021,665,5.982,666,3.713,667,3.432,668,3.432,669,3.713,670,3.713,671,3.713,676,3.208,685,1.49,714,1.377,758,1.641,760,3.713,764,1.148,863,1.641,999,2.2,1005,1.641,1008,2.5,1021,4.564,1046,1.287,1049,7.502,1050,1.87,1051,1.87,1052,1.87,1053,3.713,1054,1.641,1055,1.641,1056,8.116,1057,5.828,1058,1.641,1059,3.394,1060,5.728,1061,6.521,1062,5.828,1063,8.122,1064,4.66,1065,5.728,1066,1.87,1067,1.87,1068,1.87,1069,1.87,1070,1.87,1071,3.394,1072,1.87,1073,1.87,1074,1.87,1075,3.394,1076,1.87,1077,1.87,1078,1.87,1079,1.87,1080,1.87,1081,1.87,1082,1.87,1083,3.394,1084,1.87,1085,1.87,1086,3.394,1087,1.87,1088,1.87,1089,1.87,1090,1.87,1091,1.87,1092,1.87,1093,1.87,1094,1.87]],["keywords/92",[]],["title/93",[324,426.207,1046,643.598]],["content/93",[10,1.761,19,1.328,33,3.632,49,4.365,160,4.29,166,4.772,234,1.058,276,2.241,289,3.106,316,0.912,324,2.655,385,5.055,406,4.01,454,2.562,504,4.247,506,4.715,516,4.715,524,3.889,633,3.776,651,4.641,760,4.641,801,6.087,807,7.871,808,4.641,999,5.732,1012,5.111,1013,5.111,1014,7.759,1024,9.508,1027,7.045,1028,5.111,1029,5.111,1030,5.111,1032,5.111,1033,5.111,1034,5.111,1046,6.087,1049,6.512,1054,5.111,1055,5.111,1056,4.641,1095,5.825,1096,5.825,1097,10.687,1098,5.825,1099,5.825,1100,5.825,1101,5.825,1102,5.825,1103,5.825,1104,10.687,1105,5.825,1106,5.825,1107,5.825]],["keywords/93",[]],["title/94",[18,429.214,316,109.447,327,408.227,1046,481.218]],["content/94",[18,2.428,19,0.901,28,4.081,29,3.078,44,2.673,49,4.366,96,1.162,97,2.428,135,6.105,154,6.105,166,4.311,183,2.023,234,1.928,276,1.522,289,2.109,316,1.019,317,2.309,327,4.841,390,4.792,399,1.87,438,3.8,452,1.803,454,1.739,481,1.87,483,3.198,484,2.109,491,1.943,493,1.943,504,3.295,519,1.87,520,2.913,521,2.913,529,4.792,532,4.479,534,6.228,535,2.913,589,2.913,648,5.662,655,9.099,657,6.605,664,2.564,676,4.479,677,4.792,678,3.47,679,3.47,680,3.47,683,3.47,685,3.151,686,3.151,687,2.309,724,5.709,725,10.02,793,4.792,873,3.47,999,4.218,1008,2.913,1049,7.82,1053,3.151,1056,8.46,1057,5.709,1058,3.47,1108,3.955,1109,6.507,1110,3.955,1111,3.955,1112,8.29,1113,5.709,1114,3.955,1115,5.709,1116,6.507,1117,6.507,1118,3.955,1119,6.507,1120,3.955,1121,6.507,1122,3.955,1123,3.47,1124,7.274,1125,3.47]],["keywords/94",[]],["title/95",[316,146.378,1126,934.966]],["content/95",[19,1.208,20,2.507,33,2.178,44,3.379,49,4.407,112,5.333,154,6.058,166,4.058,234,0.963,277,4.652,316,0.83,438,3.096,468,3.75,504,2.107,519,2.507,524,5.97,532,3.649,534,5.333,596,4.584,598,3.75,633,3.437,648,4.386,655,4.224,664,7.363,695,4.224,718,4.652,793,3.904,999,3.437,1008,3.904,1021,4.224,1053,4.224,1061,8.844,1062,4.652,1113,4.652,1115,4.652,1123,4.652,1124,4.652,1125,4.652,1127,8.226,1128,5.301,1129,8.226,1130,8.226,1131,8.226,1132,10.079,1133,8.226,1134,12.295,1135,11.358,1136,5.301,1137,5.301,1138,5.301,1139,8.226,1140,8.226,1141,5.301,1142,5.301]],["keywords/95",[]]],"invertedIndex":[["",{"_index":49,"title":{"9":{"position":[[4,1]]}},"content":{"4":{"position":[[283,1]]},"17":{"position":[[322,2],[330,1],[332,1],[530,1]]},"18":{"position":[[292,1],[294,3],[305,1],[334,3],[410,3],[414,1],[416,1],[507,1],[641,1]]},"19":{"position":[[108,1],[119,1],[227,2],[230,1],[551,3]]},"43":{"position":[[218,1],[399,1],[401,1],[428,3],[432,1],[449,3],[465,1],[544,3],[574,1],[636,2],[639,3],[643,1],[645,3],[649,1],[685,2],[723,1],[781,1],[783,2],[882,2],[992,1],[1037,1],[1088,1],[1106,1],[1146,3],[1150,1],[1152,1],[1229,1],[1403,1],[1405,1],[1432,3],[1436,1],[1453,3],[1457,1],[1482,1],[1484,2],[1493,1],[1512,1],[1595,1],[1663,1],[1723,1],[1784,2],[1795,1],[1853,1],[1855,2],[1964,2],[1975,1],[2068,2],[2071,2],[2074,1]]},"49":{"position":[[48,3],[61,1],[63,3],[80,1],[82,1],[84,3],[96,1],[98,1],[100,1],[102,3],[124,1],[126,1],[128,1],[130,1],[132,3],[146,1],[148,1],[150,1],[152,1],[154,1],[156,3],[187,1],[189,1],[191,1],[193,1],[195,1],[197,3],[219,1],[221,1],[223,1],[225,1],[227,1],[229,3],[253,1],[255,1],[257,1],[259,1],[261,1],[263,3],[276,1],[278,1],[280,1],[282,3],[306,1],[308,1],[310,1],[312,3],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3]]},"52":{"position":[[95,1],[116,1],[143,1],[160,1],[191,1],[216,1],[244,2],[329,1],[358,1],[427,1],[570,1],[572,1],[599,3],[603,1],[620,3],[624,2],[736,1],[796,2],[905,3],[935,1],[997,2],[1000,3],[1004,1],[1006,1]]},"53":{"position":[[203,1],[224,1],[246,1],[282,1],[318,1],[354,1],[378,2],[470,1],[491,1],[528,1],[555,1],[592,1],[677,1],[710,1],[777,1],[798,3],[802,1],[836,2],[869,1],[1093,1],[1120,3],[1124,1],[1141,3],[1145,2],[1263,1],[1313,1],[1378,2],[1392,1],[1461,2],[1464,1],[1466,3],[1470,1],[1520,2],[1542,1],[1544,2],[1624,1],[1673,1],[1675,1],[1677,2],[1720,1],[1779,2],[1828,1],[1890,1],[1917,3],[1921,1],[1938,3],[1942,1],[1979,1],[2053,1],[2055,1]]},"56":{"position":[[547,2],[632,1],[661,1],[721,1],[907,1],[909,1],[936,3],[940,1],[957,3],[973,1],[1038,2],[1047,1],[1156,3],[1160,2],[1163,3],[1167,1],[1169,3],[1173,1],[1211,2],[1241,1],[1299,1],[1350,1],[1368,1],[1388,1],[1460,1],[1512,1],[1517,1],[1597,1],[1599,1],[1655,1],[1666,3],[1670,1],[1672,1],[1717,2],[1811,1],[1873,1],[1933,1],[1959,1],[2102,1],[2104,1],[2131,3],[2135,1],[2152,3],[2156,1],[2176,1],[2178,2],[2187,1],[2241,1],[2319,1],[2403,1],[2440,1],[2445,1],[2537,1],[2539,1],[2619,2],[2630,1],[2727,2],[2730,2],[2755,1],[2757,2],[2766,1],[2790,1],[2798,2],[2824,1],[2826,2],[2835,1],[2859,1],[2868,2],[2871,1],[2900,1],[3031,1],[3033,1],[3047,2],[3072,1],[3089,2],[3105,1],[3113,2],[3162,2],[3165,1],[3212,1],[3435,2],[3438,3]]},"57":{"position":[[319,1],[321,3],[325,1],[355,1],[357,3],[369,1],[383,3],[387,1],[408,1],[410,3],[427,1],[447,1],[604,1],[606,3],[610,1],[649,1],[651,3],[669,1],[689,3],[693,1],[740,1],[742,3],[758,1],[776,1],[894,1],[915,1],[981,1],[983,3],[987,1],[1026,1],[1028,3],[1046,1],[1082,3],[1086,1],[1133,1],[1135,3],[1151,1],[1185,3],[1189,1],[1224,1],[1226,3],[1238,1],[1252,1]]},"61":{"position":[[176,2],[261,1],[290,1],[350,1],[536,1],[538,1],[565,3],[569,1],[586,3],[602,1],[648,2],[751,2],[760,1],[913,3],[917,2],[920,3],[924,1],[926,3],[930,1],[968,2],[998,1],[1056,1],[1107,1],[1125,1],[1145,1],[1217,1],[1269,1],[1274,1],[1354,1],[1356,1],[1412,1],[1423,3],[1427,1],[1429,1]]},"62":{"position":[[102,2],[194,1],[215,1],[252,1],[279,1],[309,3],[313,1],[347,2],[380,1],[604,1],[631,3],[635,1],[652,3],[656,2],[774,1],[824,1],[889,2],[903,1],[972,2],[975,1],[977,3],[981,1],[1031,2],[1053,1],[1055,2],[1135,1],[1184,1],[1186,1]]},"63":{"position":[[121,1],[141,1],[162,1],[207,1],[266,1],[352,2],[355,4],[367,1],[621,2],[726,2],[729,3]]},"64":{"position":[[543,1],[563,1],[617,1],[765,1],[767,1],[794,3],[798,1],[815,3],[831,1],[898,2],[907,1],[969,2],[972,3],[976,1],[978,3],[982,1],[1011,2],[1033,1],[1114,1],[1136,1],[1223,2],[1256,1],[1293,1],[1304,3],[1308,1],[1489,1],[1515,1],[1702,1],[1704,1],[1731,3],[1735,1],[1752,3],[1756,1],[1786,1],[1841,1],[1854,1],[1856,2],[1865,1],[1887,1],[1982,1],[2048,1],[2116,1],[2173,1],[2259,2],[2262,2],[2287,1],[2289,2],[2298,1],[2322,1],[2330,2],[2356,1],[2358,2],[2367,1],[2391,1],[2400,2],[2403,1]]},"65":{"position":[[179,1],[181,1],[245,2]]},"69":{"position":[[181,1],[202,1],[229,1],[246,1],[277,1],[302,1],[330,2],[415,1],[444,1],[513,1],[656,1],[658,1],[685,3],[689,1],[706,3],[722,1],[801,3],[831,1],[893,2],[896,3],[900,1],[902,3],[906,1],[942,2],[980,1],[1038,1],[1089,1],[1091,2],[1127,1],[1129,2],[1209,3],[1213,1],[1215,1]]},"70":{"position":[[59,1],[61,1],[83,3],[87,1],[114,2],[134,3],[138,1],[192,2],[238,2]]},"71":{"position":[[249,1],[359,1],[361,1],[388,3],[392,1],[409,3],[490,3],[520,1],[582,2],[585,3],[589,1],[591,3],[595,1],[631,2],[669,1],[734,1],[785,1],[803,1],[843,3],[847,1],[849,1],[947,1],[958,1],[991,1],[1010,1],[1070,1],[1090,1],[1099,1],[1313,1],[1338,2],[1341,3],[1607,1],[1669,1],[1696,3],[1700,1],[1717,3],[1721,1],[1758,1],[1832,1],[1834,1],[1915,1],[1935,1],[1943,2],[1968,2],[1971,1],[2005,1],[2077,1],[2177,2],[2218,2],[2221,3]]},"73":{"position":[[264,1],[266,3],[305,1],[370,1],[421,1],[439,1],[479,3],[483,1],[523,1],[588,1],[639,1],[657,1],[697,3],[701,1],[736,1],[801,1],[852,1],[870,1],[910,3],[914,1],[916,1],[1248,1],[1250,3],[1289,1],[1354,1],[1405,1],[1423,1],[1463,3],[1467,1],[1469,1]]},"74":{"position":[[288,1],[332,1],[334,3],[338,1],[367,1],[369,3],[373,1],[400,1],[402,3],[406,1],[444,1],[446,3],[450,1],[454,1],[493,1],[495,3],[499,1],[527,1],[529,3],[533,1]]},"75":{"position":[[68,1],[100,1],[125,1],[127,3],[131,1],[135,1],[170,1],[195,1],[197,3],[201,1]]},"77":{"position":[[72,3],[85,1],[87,3],[104,1],[106,1],[108,3],[122,1],[124,1],[126,1],[128,3],[146,1],[148,1],[150,1],[152,1],[154,3],[175,1],[177,1],[179,1],[181,1],[183,3],[210,1],[212,1],[214,1],[216,1],[218,3],[231,1],[233,1],[235,1],[237,3],[250,1],[252,1],[254,3]]},"79":{"position":[[58,3],[75,1],[77,3],[88,1],[90,1],[92,3],[103,1],[105,1],[107,1],[109,3],[128,1],[130,1],[132,3],[142,1],[144,1],[146,1],[148,3],[164,3],[177,1],[179,3],[196,1],[198,1],[200,3],[214,1],[216,1],[218,1],[220,3],[238,1],[240,1],[242,1],[244,1],[246,3],[267,1],[269,1],[271,1],[273,1],[275,3],[302,1],[304,1],[306,1],[308,1],[310,3],[323,1],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3],[408,1],[429,1],[463,1],[481,1],[541,1],[543,2],[552,1],[561,1],[641,2],[644,2],[723,1],[759,1],[793,1],[811,1],[844,1],[868,1],[929,1],[931,2],[940,1],[948,1],[953,1],[955,1],[985,1],[1055,1],[1064,1],[1171,2],[1174,2]]},"82":{"position":[[494,1],[506,1],[529,1],[540,1],[573,1],[599,1],[632,1],[675,1],[708,1],[726,1],[769,1],[771,1],[794,2],[826,1],[849,2],[865,1],[874,1],[1013,1],[1071,2],[1095,1],[1173,2],[1176,2],[1185,2],[1188,2],[1232,2],[1235,3],[1482,1],[1503,1],[1537,1],[1555,1],[1615,1],[1617,2],[1626,1],[1635,1],[1715,2],[1718,2]]},"84":{"position":[[8,1],[22,1],[60,1],[73,1],[103,1],[128,1],[162,1],[164,1],[190,3],[194,1],[268,2],[339,2],[342,3],[346,1],[415,2],[447,1],[449,2],[488,2],[504,1],[532,1],[551,1],[590,1],[632,1],[656,3],[697,1],[775,1],[799,3],[842,1],[932,1],[994,2]]},"86":{"position":[[44,3],[57,1],[59,3],[76,1],[78,1],[80,3],[92,1],[94,1],[96,1],[98,3],[120,1],[122,1],[124,1],[126,1],[128,3],[142,1],[144,1],[146,1],[148,1],[150,3],[161,1],[163,1],[165,1],[167,1],[169,1],[171,3],[194,1],[196,1],[198,1],[200,1],[202,1],[204,3],[228,1],[230,1],[232,1],[234,1],[236,1],[238,3],[251,1],[253,1],[255,1],[257,3],[281,1],[283,1],[285,1],[287,3],[300,1],[302,1],[304,3],[317,1],[319,1],[321,3]]},"89":{"position":[[525,2],[612,1],[625,1],[686,1],[688,1],[737,1],[776,1],[798,1],[849,1],[870,1],[924,1],[1002,1],[1055,1],[1066,3],[1258,1],[1278,1],[1332,1],[1480,1],[1482,1],[1509,3],[1513,1],[1530,3],[1546,1],[1613,2],[1622,1],[1684,2],[1687,3],[1691,1],[1693,3],[1697,1],[1726,2],[1748,1],[1829,1],[1851,1],[1938,2],[1971,1],[2008,1],[2019,3],[2023,1],[2112,1],[2132,1],[2184,1],[2381,1],[2383,1],[2410,3],[2414,1],[2431,3],[2447,1],[2512,2],[2521,1],[2674,3],[2678,2],[2681,3],[2685,1],[2687,3],[2691,1],[2728,2],[2756,1],[2789,1],[2847,1],[2869,1],[2956,2],[2989,1],[3026,1],[3046,1],[3117,1],[3169,1],[3180,3],[3184,2],[3187,1]]},"90":{"position":[[32,1],[41,3],[45,1],[75,2],[105,1],[128,6],[135,3],[139,1],[172,2],[199,1],[255,6],[264,1],[296,1],[319,6],[351,1],[407,6]]},"92":{"position":[[47,1],[233,1],[235,1],[262,3],[266,1],[283,3],[299,1],[364,2],[373,1],[482,3],[486,2],[489,3],[493,1],[495,3],[499,1],[537,2],[567,1],[625,1],[676,1],[694,1],[714,1],[786,1],[838,1],[843,1],[923,1],[925,1],[981,1],[992,3],[996,1],[998,1],[1176,2],[1185,1],[1225,2],[1234,4],[1239,3],[1433,1],[1491,1],[1493,2],[1580,1],[1598,1],[1618,1],[1666,2],[1740,1],[1792,1],[1794,2],[1860,1],[1940,1],[1942,1],[1998,1],[2000,2],[2107,3],[2111,1],[2169,2],[2178,1],[2218,2],[2227,1],[2265,2],[2274,1],[2282,1],[2288,1],[2290,1],[2320,3],[2374,3],[2426,2],[2435,4],[2501,2],[2510,4],[2590,2],[2599,4],[2700,2],[2709,4],[2714,3],[2718,3],[2908,2],[2917,1],[2931,1],[2939,2],[2964,2],[2967,1],[3050,2],[3059,1],[3081,1],[3130,1],[3173,1],[3219,2],[3270,2],[3279,2],[3291,4],[3296,3],[3322,1],[3377,2],[3430,2],[3492,2],[3495,3],[3509,1],[3579,2],[3629,1],[3635,2],[3638,2],[3679,2],[3688,1],[3726,2],[3735,1],[3743,1],[3749,1],[3751,1],[3781,3],[3835,3],[3839,3],[3843,3],[4170,2],[4179,1],[4187,1],[4193,1],[4195,1],[4240,1],[4254,2],[4257,3],[4386,2],[4389,3],[4495,1],[4553,1],[4604,1],[4622,1],[4642,1],[4714,1],[4766,1],[4771,1],[4851,1],[4853,1],[4909,1],[4911,2],[4961,3],[4965,1],[5155,2],[5164,1],[5172,1],[5178,1],[5180,1],[5225,1],[5296,1],[5331,2],[5334,3],[5338,2],[5341,3],[5395,3]]},"93":{"position":[[254,1],[256,1],[305,1],[344,1],[366,1],[417,1],[438,1],[492,1],[497,1],[580,1],[582,1],[635,1],[646,3],[682,2],[691,1],[717,2],[726,1],[771,2],[780,1],[799,1],[932,3],[989,2],[998,4],[1064,2],[1073,4],[1078,3],[1129,1],[1196,2],[1205,4],[1210,3]]},"94":{"position":[[265,1],[295,1],[405,1],[407,1],[435,1],[455,1],[480,1],[482,2],[621,1],[694,1],[696,2],[795,1],[882,1],[884,1],[886,1],[923,1],[925,2],[1030,1],[1123,1],[1125,1],[1127,1],[1207,2],[1218,1],[1220,2],[1428,2],[1431,2],[1460,1],[1462,2],[1471,1],[1499,1],[1507,2],[1537,1],[1539,2],[1548,1],[1576,1],[1585,2],[1588,1],[1644,2],[1653,1],[1693,2],[1702,1],[1783,2],[1792,4],[1885,2],[1894,4],[1993,2],[2002,4],[2112,2],[2121,4],[2126,3],[2130,3]]},"95":{"position":[[150,1],[161,1],[199,1],[249,1],[306,2],[315,1],[355,2],[364,1],[378,1],[427,1],[446,1],[480,1],[558,1],[576,2],[579,2],[661,2],[670,1],[672,2],[754,1],[798,1],[842,2],[845,3],[855,1],[868,1],[870,1],[972,3],[1064,2],[1073,1],[1075,2],[1183,1],[1227,1],[1305,2],[1308,2],[1311,3],[1321,1],[1327,1],[1329,1],[1407,3],[1411,3],[1415,3]]}},"keywords":{}}],["0",{"_index":311,"title":{},"content":{"20":{"position":[[201,1]]}},"keywords":{}}],["1",{"_index":1092,"title":{},"content":{"92":{"position":[[5312,2]]}},"keywords":{}}],["2",{"_index":1094,"title":{},"content":{"92":{"position":[[5329,1]]}},"keywords":{}}],["20.05.2024",{"_index":849,"title":{},"content":{"68":{"position":[[555,10],[764,10]]}},"keywords":{}}],["2fa",{"_index":415,"title":{"42":{"position":[[0,3]]}},"content":{"34":{"position":[[301,3],[483,4]]},"43":{"position":[[74,4],[967,3],[1914,3],[1958,5]]}},"keywords":{}}],["80",{"_index":259,"title":{},"content":{"18":{"position":[[314,3],[325,8]]}},"keywords":{}}],["__env__",{"_index":163,"title":{},"content":{"13":{"position":[[416,7]]},"19":{"position":[[110,8]]}},"keywords":{}}],["abac",{"_index":339,"title":{"31":{"position":[[12,4]]},"32":{"position":[[17,5]]},"34":{"position":[[9,4]]}},"content":{"32":{"position":[[64,4],[303,5],[506,5]]},"33":{"position":[[620,4]]}},"keywords":{}}],["acceptableag",{"_index":807,"title":{},"content":{"64":{"position":[[1035,15],[1157,14]]},"89":{"position":[[690,15],[781,16],[987,14],[1750,15],[1872,14],[2758,16],[2890,14]]},"90":{"position":[[201,15],[353,15]]},"93":{"position":[[258,15],[349,16],[566,13]]}},"keywords":{}}],["access",{"_index":351,"title":{},"content":{"32":{"position":[[86,6],[121,6]]}},"keywords":{}}],["account",{"_index":720,"title":{},"content":{"57":{"position":[[437,9]]}},"keywords":{}}],["add_head",{"_index":260,"title":{},"content":{"18":{"position":[[338,10]]}},"keywords":{}}],["addingtoshelf",{"_index":664,"title":{},"content":{"56":{"position":[[1225,15]]},"61":{"position":[[40,13],[982,15]]},"74":{"position":[[351,15]]},"92":{"position":[[551,15],[1417,15],[4479,15]]},"94":{"position":[[96,13]]},"95":{"position":[[703,13],[800,14],[1106,13],[1229,14]]}},"keywords":{}}],["addtoshelf",{"_index":678,"title":{},"content":{"56":{"position":[[2165,10],[3116,11]]},"94":{"position":[[444,10]]}},"keywords":{}}],["admin",{"_index":334,"title":{},"content":{"30":{"position":[[1,5]]},"57":{"position":[[375,7],[1244,7]]},"79":{"position":[[96,6]]},"82":{"position":[[320,6],[408,7],[1332,7]]}},"keywords":{}}],["admin/createbook",{"_index":976,"title":{},"content":{"82":{"position":[[37,18]]}},"keywords":{}}],["admin/createbookbook/read",{"_index":943,"title":{},"content":{"79":{"position":[[28,28]]}},"keywords":{}}],["administr",{"_index":497,"title":{},"content":{"43":{"position":[[507,17]]},"51":{"position":[[277,15]]},"52":{"position":[[778,17]]},"53":{"position":[[939,15]]},"62":{"position":[[450,15]]},"69":{"position":[[764,17]]},"71":{"position":[[453,17]]}},"keywords":{}}],["administrationact",{"_index":503,"title":{},"content":{"43":{"position":[[699,23]]},"51":{"position":[[222,21]]},"69":{"position":[[956,23]]},"71":{"position":[[645,23]]},"73":{"position":[[1133,22],[1265,23],[1520,21]]},"74":{"position":[[308,23]]},"82":{"position":[[165,22],[340,21]]}},"keywords":{}}],["administrationactionsдоступ",{"_index":916,"title":{},"content":{"74":{"position":[[152,27]]}},"keywords":{}}],["administrationpolici",{"_index":612,"title":{},"content":{"52":{"position":[[865,20]]},"82":{"position":[[115,20]]}},"keywords":{}}],["administrationpolicypermiss",{"_index":594,"title":{},"content":{"51":{"position":[[311,30]]}},"keywords":{}}],["administrationpolicystor",{"_index":482,"title":{},"content":{"43":{"position":[[192,25]]},"49":{"position":[[160,26]]},"52":{"position":[[401,25]]},"53":{"position":[[712,26],[955,26]]},"62":{"position":[[466,26]]},"69":{"position":[[487,25]]},"71":{"position":[[223,25]]},"73":{"position":[[238,25],[1222,25]]}},"keywords":{}}],["adminrouteguard",{"_index":931,"title":{},"content":{"77":{"position":[[158,16]]},"79":{"position":[[250,16],[465,15]]},"82":{"position":[[810,15],[1539,15]]}},"keywords":{}}],["agepermiss",{"_index":809,"title":{},"content":{"64":{"position":[[1122,13]]},"89":{"position":[[1837,13],[2855,13]]}},"keywords":{}}],["agepermission.isallow",{"_index":811,"title":{},"content":{"64":{"position":[[1229,26]]},"89":{"position":[[1944,26],[2962,26]]}},"keywords":{}}],["allow",{"_index":516,"title":{},"content":{"43":{"position":[[1097,8]]},"56":{"position":[[1359,8],[1657,8]]},"61":{"position":[[1116,8],[1414,8]]},"64":{"position":[[1295,8]]},"69":{"position":[[1118,8]]},"71":{"position":[[794,8],[1207,7]]},"73":{"position":[[430,8],[648,8],[861,8],[1414,8]]},"89":{"position":[[1057,8],[2010,8],[3171,8]]},"92":{"position":[[685,8],[983,8],[1384,5],[1589,8],[2098,8],[4411,5],[4613,8],[4919,5],[4952,8],[4985,5]]},"93":{"position":[[180,5],[637,8]]}},"keywords":{}}],["allowadministrationrout",{"_index":902,"title":{},"content":{"73":{"position":[[496,26]]}},"keywords":{}}],["allowedcount",{"_index":1093,"title":{},"content":{"92":{"position":[[5315,13]]}},"keywords":{}}],["alpin",{"_index":213,"title":{},"content":{"17":{"position":[[248,6]]}},"keywords":{}}],["amp;&",{"_index":894,"title":{},"content":{"71":{"position":[[2066,10]]}},"keywords":{}}],["api",{"_index":364,"title":{"70":{"position":[[0,3]]}},"content":{"32":{"position":[[339,3]]},"34":{"position":[[40,3]]}},"keywords":{}}],["apiurl",{"_index":295,"title":{},"content":{"19":{"position":[[358,7]]}},"keywords":{}}],["apiна",{"_index":430,"title":{},"content":{"36":{"position":[[268,5]]}},"keywords":{}}],["app",{"_index":771,"title":{},"content":{"63":{"position":[[117,3]]}},"keywords":{}}],["applic",{"_index":7,"title":{},"content":{"1":{"position":[[30,12]]},"19":{"position":[[307,11]]},"63":{"position":[[52,11]]},"79":{"position":[[62,12]]}},"keywords":{}}],["application/app.tsx",{"_index":770,"title":{},"content":{"63":{"position":[[82,19]]}},"keywords":{}}],["application/pages/admin/createbook.tsx",{"_index":946,"title":{},"content":{"79":{"position":[[361,38]]},"82":{"position":[[1435,38]]}},"keywords":{}}],["application/pages/book/reading.tsx",{"_index":954,"title":{},"content":{"79":{"position":[[680,34]]}},"keywords":{}}],["astral/permiss",{"_index":468,"title":{"39":{"position":[[14,20]]},"52":{"position":[[33,20]]},"69":{"position":[[33,20]]}},"content":{"39":{"position":[[59,20]]},"52":{"position":[[247,19],[365,22]]},"53":{"position":[[397,19],[498,22],[562,22]]},"56":{"position":[[550,19],[668,22]]},"57":{"position":[[457,19],[922,22]]},"61":{"position":[[179,19],[297,22]]},"62":{"position":[[121,19],[222,22],[286,22]]},"69":{"position":[[333,19],[451,22]]},"88":{"position":[[48,20]]},"89":{"position":[[528,19],[632,22]]},"95":{"position":[[121,20],[256,22]]}},"keywords":{}}],["astral/vit",{"_index":319,"title":{},"content":{"22":{"position":[[27,11]]},"23":{"position":[[27,11]]},"24":{"position":[[27,11]]},"25":{"position":[[27,11]]},"26":{"position":[[27,11]]},"27":{"position":[[27,11]]},"28":{"position":[[27,11]]},"29":{"position":[[27,11]]}},"keywords":{}}],["async",{"_index":499,"title":{},"content":{"43":{"position":[[538,5]]},"52":{"position":[[899,5]]},"56":{"position":[[1032,5]]},"61":{"position":[[745,5]]},"64":{"position":[[892,5]]},"69":{"position":[[795,5]]},"71":{"position":[[484,5]]},"89":{"position":[[1607,5],[2506,5]]},"92":{"position":[[358,5],[2259,5],[2420,5],[2495,5],[2584,5],[2694,5],[2933,5],[3264,5],[3424,5],[3720,5],[4164,5],[5149,5]]}},"keywords":{}}],["attribut",{"_index":349,"title":{},"content":{"32":{"position":[[69,10]]}},"keywords":{}}],["auth",{"_index":476,"title":{"42":{"position":[[16,5]]}},"content":{},"keywords":{}}],["authstore.addprotectedhttpclients([apihttpcli",{"_index":777,"title":{},"content":{"63":{"position":[[300,51]]}},"keywords":{}}],["autobind",{"_index":492,"title":{},"content":{"43":{"position":[[434,9],[1438,9]]},"52":{"position":[[605,9]]},"53":{"position":[[1126,9],[1923,9]]},"56":{"position":[[942,9],[2137,9]]},"61":{"position":[[571,9]]},"62":{"position":[[637,9]]},"64":{"position":[[800,9],[1737,9]]},"69":{"position":[[691,9]]},"71":{"position":[[394,9],[1702,9]]},"89":{"position":[[1515,9],[2416,9]]},"92":{"position":[[268,9]]}},"keywords":{}}],["await",{"_index":501,"title":{},"content":{"43":{"position":[[576,5]]},"52":{"position":[[937,5]]},"56":{"position":[[1049,5]]},"61":{"position":[[762,5]]},"64":{"position":[[909,5]]},"69":{"position":[[833,5]]},"71":{"position":[[522,5]]},"89":{"position":[[1624,5],[2523,5]]},"92":{"position":[[375,5],[2292,5],[3582,5],[3753,5],[4197,5],[5182,5]]}},"keywords":{}}],["base",{"_index":350,"title":{},"content":{"32":{"position":[[80,5],[115,5]]}},"keywords":{}}],["bash",{"_index":176,"title":{},"content":{"13":{"position":[[803,4],[819,4]]},"15":{"position":[[110,4]]},"17":{"position":[[65,4]]}},"keywords":{}}],["billinginfo",{"_index":665,"title":{},"content":{"56":{"position":[[1376,11]]},"61":{"position":[[1133,11]]},"89":{"position":[[3034,11]]},"92":{"position":[[702,11],[1606,11],[2951,12],[2987,13],[4227,12],[4630,11],[5212,12]]}},"keywords":{}}],["billinginfo.info.shelf.allowedcount",{"_index":670,"title":{},"content":{"56":{"position":[[1561,35]]},"61":{"position":[[1318,35]]},"92":{"position":[[887,35],[1904,35],[4815,35]]}},"keywords":{}}],["billinginfo.info.shelf.currentcount",{"_index":669,"title":{},"content":{"56":{"position":[[1519,35]]},"61":{"position":[[1276,35]]},"92":{"position":[[845,35],[1862,35],[4773,35]]}},"keywords":{}}],["billinginfo?.paid",{"_index":667,"title":{},"content":{"56":{"position":[[1439,20]]},"61":{"position":[[1196,20]]},"89":{"position":[[3096,20]]},"92":{"position":[[765,20],[1719,20],[4693,20]]}},"keywords":{}}],["billingrepo",{"_index":628,"title":{},"content":{"53":{"position":[[1438,12]]},"56":{"position":[[832,12]]},"61":{"position":[[461,12]]},"62":{"position":[[949,12]]},"89":{"position":[[2306,12]]},"92":{"position":[[158,12]]}},"keywords":{}}],["billingrepomock",{"_index":1075,"title":{},"content":{"92":{"position":[[3306,15],[3548,16]]}},"keywords":{}}],["billingrepositori",{"_index":617,"title":{},"content":{"53":{"position":[[248,18],[320,18],[1048,18],[1744,18]]},"56":{"position":[[845,18]]},"61":{"position":[[91,18],[474,18]]},"62":{"position":[[559,18]]},"89":{"position":[[2319,18]]},"92":{"position":[[171,18]]}},"keywords":{}}],["billingrepositoryfaker.makebillingdetail",{"_index":1089,"title":{},"content":{"92":{"position":[[5245,43]]}},"keywords":{}}],["billingrepositoryfaker.makebillinginfo(billinginfo",{"_index":1079,"title":{},"content":{"92":{"position":[[3439,52]]}},"keywords":{}}],["boilerpl",{"_index":98,"title":{},"content":{"10":{"position":[[26,12]]}},"keywords":{}}],["boilerplate/blob/main/application/app.tsx#l44",{"_index":330,"title":{},"content":{"28":{"position":[[39,45]]}},"keywords":{}}],["boilerplate/blob/main/modules/books/features/booklist/uistore/uistore.ts#l76",{"_index":328,"title":{},"content":{"27":{"position":[[39,76]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/enums.t",{"_index":323,"title":{},"content":{"24":{"position":[[39,57]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystore/paymentpolicystore.ts#l33",{"_index":326,"title":{},"content":{"26":{"position":[[39,126]]}},"keywords":{}}],["boilerplate/tree/main/modules/permiss",{"_index":320,"title":{},"content":{"22":{"position":[[39,41]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/polici",{"_index":321,"title":{},"content":{"23":{"position":[[39,81]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/rul",{"_index":325,"title":{},"content":{"25":{"position":[[39,78]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/features/routeguard",{"_index":333,"title":{},"content":{"29":{"position":[[39,62]]}},"keywords":{}}],["book",{"_index":596,"title":{},"content":{"51":{"position":[[387,6]]},"53":{"position":[[998,6]]},"56":{"position":[[1010,8]]},"61":{"position":[[639,8]]},"62":{"position":[[509,6]]},"79":{"position":[[136,5]]},"89":{"position":[[2484,8]]},"92":{"position":[[336,8]]},"95":{"position":[[791,6],[1220,6]]}},"keywords":{}}],["bookbyidqueri",{"_index":817,"title":{},"content":{"64":{"position":[[1770,15]]}},"keywords":{}}],["bookcard",{"_index":696,"title":{},"content":{"56":{"position":[[3063,8]]}},"keywords":{}}],["bookid",{"_index":677,"title":{},"content":{"56":{"position":[[1998,7],[2902,8]]},"64":{"position":[[1554,7],[2018,9]]},"75":{"position":[[102,8],[172,8]]},"94":{"position":[[457,8],[654,9]]}},"keywords":{}}],["bookspolici",{"_index":597,"title":{},"content":{"51":{"position":[[412,11]]},"61":{"position":[[3,11]]}},"keywords":{}}],["bookspolicystor",{"_index":582,"title":{},"content":{"49":{"position":[[201,17]]},"53":{"position":[[739,17],[1005,17]]},"56":{"position":[[704,16]]},"61":{"position":[[333,16]]},"62":{"position":[[516,17]]},"89":{"position":[[1099,16],[2167,16]]},"92":{"position":[[30,16],[3515,17]]}},"keywords":{}}],["booksrepo",{"_index":815,"title":{},"content":{"64":{"position":[[1675,10]]}},"keywords":{}}],["booksrepositori",{"_index":816,"title":{},"content":{"64":{"position":[[1686,15]]}},"keywords":{}}],["boolean",{"_index":863,"title":{},"content":{"70":{"position":[[74,8],[229,8]]},"92":{"position":[[2978,8]]}},"keywords":{}}],["brotli:v1.19.1",{"_index":224,"title":{},"content":{"17":{"position":[[394,14]]}},"keywords":{}}],["build",{"_index":101,"title":{"11":{"position":[[25,5]]}},"content":{"11":{"position":[[17,5]]},"17":{"position":[[258,5],[369,5]]}},"keywords":{}}],["buy",{"_index":819,"title":{},"content":{"64":{"position":[[1850,3]]}},"keywords":{}}],["cacheservic",{"_index":1069,"title":{},"content":{"92":{"position":[[3117,12]]}},"keywords":{}}],["cacheservice.createquery(['bil",{"_index":1078,"title":{},"content":{"92":{"position":[[3386,37]]}},"keywords":{}}],["cacheservice.createquery(['rol",{"_index":1074,"title":{},"content":{"92":{"position":[[3228,35]]}},"keywords":{}}],["calc",{"_index":926,"title":{},"content":{"75":{"position":[[61,5]]},"90":{"position":[[25,5]]}},"keywords":{}}],["calcacceptableag",{"_index":801,"title":{},"content":{"64":{"position":[[545,17],[1138,18]]},"86":{"position":[[175,18]]},"89":{"position":[[429,18],[668,17],[1127,17],[1260,17],[1853,18],[2114,17],[2871,18]]},"90":{"position":[[181,17]]},"93":{"position":[[236,17],[801,20]]}},"keywords":{}}],["calcaccountpay",{"_index":1018,"title":{},"content":{"86":{"position":[[208,19]]}},"keywords":{}}],["calcadminpermiss",{"_index":1042,"title":{},"content":{"90":{"position":[[84,20]]}},"keywords":{}}],["calcpay",{"_index":806,"title":{},"content":{"64":{"position":[[1021,11]]},"89":{"position":[[300,12],[1736,11]]}},"keywords":{}}],["calcreadingbook",{"_index":927,"title":{},"content":{"75":{"position":[[84,15]]},"89":{"position":[[282,15]]}},"keywords":{}}],["calcreadingonlin",{"_index":1037,"title":{},"content":{"89":{"position":[[2738,17]]}},"keywords":{}}],["canreadingbook",{"_index":923,"title":{},"content":{"74":{"position":[[476,16]]}},"keywords":{}}],["case",{"_index":747,"title":{},"content":{"58":{"position":[[149,4]]}},"keywords":{}}],["checkacceptableag",{"_index":1044,"title":{},"content":{"90":{"position":[[332,18]]}},"keywords":{}}],["checkadminrol",{"_index":1043,"title":{},"content":{"90":{"position":[[281,14]]}},"keywords":{}}],["checkreadingbook",{"_index":928,"title":{},"content":{"75":{"position":[[153,16]]}},"keywords":{}}],["children",{"_index":986,"title":{},"content":{"82":{"position":[[773,9],[840,8],[1085,9],[1196,10]]},"84":{"position":[[318,9],[367,9],[478,9],[541,9]]}},"keywords":{}}],["class",{"_index":481,"title":{},"content":{"43":{"position":[[186,5],[1215,5]]},"52":{"position":[[395,5]]},"53":{"position":[[846,5],[1814,5]]},"56":{"position":[[698,5],[1919,5]]},"61":{"position":[[327,5]]},"62":{"position":[[357,5]]},"64":{"position":[[592,5],[1475,5]]},"69":{"position":[[481,5]]},"71":{"position":[[217,5],[1593,5]]},"73":{"position":[[232,5],[1216,5]]},"89":{"position":[[1307,5],[2161,5]]},"92":{"position":[[24,5]]},"94":{"position":[[251,5]]}},"keywords":{}}],["client",{"_index":72,"title":{},"content":{"6":{"position":[[108,7]]}},"keywords":{}}],["closepayaccount",{"_index":690,"title":{},"content":{"56":{"position":[[2808,15],[3146,15]]},"64":{"position":[[2340,15]]}},"keywords":{}}],["closepaymentaccount",{"_index":1122,"title":{},"content":{"94":{"position":[[1517,19]]}},"keywords":{}}],["configservic",{"_index":3,"title":{"1":{"position":[[0,14]]}},"content":{"1":{"position":[[79,14],[107,13]]}},"keywords":{}}],["configservice.init",{"_index":294,"title":{},"content":{"19":{"position":[[337,20]]}},"keywords":{}}],["connect",{"_index":264,"title":{},"content":{"18":{"position":[[373,7]]}},"keywords":{}}],["const",{"_index":524,"title":{},"content":{"43":{"position":[[1495,5]]},"53":{"position":[[1697,5]]},"56":{"position":[[1370,5],[2880,5],[3057,5],[3107,5]]},"61":{"position":[[1127,5]]},"63":{"position":[[111,5],[143,5],[183,5]]},"64":{"position":[[1116,5],[1867,5]]},"71":{"position":[[1056,5],[1901,5],[1937,5]]},"79":{"position":[[520,5],[907,5],[942,5]]},"82":{"position":[[804,5],[1594,5]]},"84":{"position":[[425,5]]},"89":{"position":[[662,5],[1831,5],[2849,5],[3028,5]]},"90":{"position":[[78,5],[175,5],[275,5],[326,5]]},"92":{"position":[[696,5],[1600,5],[2276,5],[2919,5],[3061,5],[3111,5],[3154,5],[3300,5],[3499,5],[3737,5],[4181,5],[4624,5],[5166,5]]},"93":{"position":[[230,5],[782,5]]},"95":{"position":[[366,5],[429,5],[470,5],[727,5],[849,5],[1156,5],[1315,5]]}},"keywords":{}}],["constructor",{"_index":484,"title":{},"content":{"43":{"position":[[253,12],[1231,12]]},"52":{"position":[[462,12]]},"56":{"position":[[767,12],[1968,12]]},"61":{"position":[[396,12]]},"64":{"position":[[663,12],[1524,12]]},"69":{"position":[[548,12]]},"71":{"position":[[251,12]]},"89":{"position":[[1378,12],[2230,12]]},"92":{"position":[[93,12]]},"94":{"position":[[304,12]]}},"keywords":{}}],["constructor(billingrepo",{"_index":622,"title":{},"content":{"53":{"position":[[1023,24]]},"62":{"position":[[534,24]]}},"keywords":{}}],["constructor(priv",{"_index":634,"title":{},"content":{"53":{"position":[[1830,19]]},"71":{"position":[[1609,19]]}},"keywords":{}}],["content",{"_index":261,"title":{},"content":{"18":{"position":[[349,7]]},"82":{"position":[[1074,10]]}},"keywords":{}}],["contentstateнеобходим",{"_index":766,"title":{},"content":{"62":{"position":[[1794,22]]}},"keywords":{}}],["control",{"_index":352,"title":{},"content":{"32":{"position":[[93,8],[128,9]]}},"keywords":{}}],["copi",{"_index":216,"title":{},"content":{"17":{"position":[[285,4],[325,4],[409,4],[472,4]]}},"keywords":{}}],["createadministrationpolicystor",{"_index":619,"title":{},"content":{"53":{"position":[[594,32],[1315,32]]},"62":{"position":[[826,32]]}},"keywords":{}}],["createallowedpermiss",{"_index":1133,"title":{},"content":{"95":{"position":[[201,24],[815,26]]}},"keywords":{}}],["createbook.tsx",{"_index":944,"title":{},"content":{"79":{"position":[[113,14]]}},"keywords":{}}],["createbookpag",{"_index":949,"title":{},"content":{"79":{"position":[[526,14],[662,15]]},"82":{"position":[[1600,14],[1736,15]]}},"keywords":{}}],["createbookspolicystor",{"_index":620,"title":{},"content":{"53":{"position":[[627,23],[1394,23]]},"62":{"position":[[905,23]]}},"keywords":{}}],["createcacheservic",{"_index":1070,"title":{},"content":{"92":{"position":[[3132,21]]}},"keywords":{}}],["createdenialpermiss",{"_index":1132,"title":{},"content":{"95":{"position":[[95,22],[226,22],[1244,23]]}},"keywords":{}}],["createpaymentpolicystor",{"_index":621,"title":{},"content":{"53":{"position":[[651,25]]}},"keywords":{}}],["createpermiss",{"_index":862,"title":{},"content":{"70":{"position":[[1,16]]}},"keywords":{}}],["createpolicymanagerstor",{"_index":618,"title":{},"content":{"53":{"position":[[530,24],[1265,27]]},"62":{"position":[[254,24],[776,27]]},"92":{"position":[[3083,27]]}},"keywords":{}}],["createrul",{"_index":1023,"title":{},"content":{"88":{"position":[[27,10]]},"89":{"position":[[614,10]]}},"keywords":{}}],["createrule((allow",{"_index":1028,"title":{},"content":{"89":{"position":[[745,18]]},"93":{"position":[[313,18]]}},"keywords":{}}],["createuistor",{"_index":691,"title":{},"content":{"56":{"position":[[2886,13]]}},"keywords":{}}],["createuistore(id",{"_index":699,"title":{},"content":{"56":{"position":[[3185,19]]}},"keywords":{}}],["creationbookscreen",{"_index":947,"title":{},"content":{"79":{"position":[[410,18]]},"82":{"position":[[1484,18]]}},"keywords":{}}],["csr",{"_index":52,"title":{"5":{"position":[[0,4]]},"9":{"position":[[0,3]]}},"content":{"6":{"position":[[104,3]]},"13":{"position":[[862,3]]}},"keywords":{}}],["currentcount",{"_index":1091,"title":{},"content":{"92":{"position":[[5298,13]]}},"keywords":{}}],["data",{"_index":732,"title":{},"content":{"57":{"position":[[769,6]]}},"keywords":{}}],["date",{"_index":1033,"title":{},"content":{"89":{"position":[[974,7]]},"93":{"position":[[552,8]]}},"keywords":{}}],["date(userbirthday",{"_index":1032,"title":{},"content":{"89":{"position":[[950,19]]},"93":{"position":[[528,19]]}},"keywords":{}}],["default",{"_index":953,"title":{},"content":{"79":{"position":[[654,7],[1184,7]]},"82":{"position":[[1728,7]]}},"keywords":{}}],["deletingorgan",{"_index":575,"title":{},"content":{"47":{"position":[[403,21],[638,21]]}},"keywords":{}}],["deni",{"_index":506,"title":{},"content":{"43":{"position":[[769,5]]},"56":{"position":[[1287,5]]},"61":{"position":[[1044,5]]},"64":{"position":[[1102,5]]},"69":{"position":[[1026,5]]},"71":{"position":[[722,5]]},"73":{"position":[[358,5],[576,5],[789,5],[1342,5]]},"89":{"position":[[764,5],[1817,5],[2835,5]]},"92":{"position":[[613,5],[1392,4],[1479,5],[4421,4],[4541,5],[4995,4]]},"93":{"position":[[190,4],[332,5]]}},"keywords":{}}],["denialmissingdatapermiss",{"_index":831,"title":{},"content":{"65":{"position":[[151,27]]}},"keywords":{}}],["denialswitch",{"_index":988,"title":{},"content":{"82":{"position":[[963,15],[1241,12]]},"84":{"position":[[271,13],[464,13]]}},"keywords":{}}],["denialswitch[permission.reason",{"_index":1006,"title":{},"content":{"84":{"position":[[556,33],[599,32]]}},"keywords":{}}],["deny(agepermission.reason",{"_index":812,"title":{},"content":{"64":{"position":[[1265,27]]},"89":{"position":[[1980,27],[2998,27]]}},"keywords":{}}],["deny(permissiondenialreason.exceedshelfcount",{"_index":671,"title":{},"content":{"56":{"position":[[1608,46]]},"61":{"position":[[1365,46]]},"92":{"position":[[934,46],[1951,46],[4862,46]]}},"keywords":{}}],["deny(permissiondenialreason.missingdata",{"_index":1029,"title":{},"content":{"89":{"position":[[807,41]]},"93":{"position":[[375,41]]}},"keywords":{}}],["deny(permissiondenialreason.missinguserag",{"_index":1030,"title":{},"content":{"89":{"position":[[879,44]]},"93":{"position":[[447,44]]}},"keywords":{}}],["deny(permissiondenialreason.noadmin",{"_index":517,"title":{},"content":{"43":{"position":[[1108,37]]},"69":{"position":[[1171,37]]},"71":{"position":[[805,37]]},"73":{"position":[[441,37],[659,37],[872,37],[1425,37]]}},"keywords":{}}],["deny(permissiondenialreason.nopayaccount",{"_index":668,"title":{},"content":{"56":{"position":[[1469,42]]},"61":{"position":[[1226,42]]},"89":{"position":[[3126,42]]},"92":{"position":[[795,42],[1749,42],[4723,42]]}},"keywords":{}}],["deny(permissiondenialreason.notforyourag",{"_index":1034,"title":{},"content":{"89":{"position":[[1011,43]]},"93":{"position":[[591,43]]}},"keywords":{}}],["deny(permissiondenialreason.twofa",{"_index":514,"title":{},"content":{"43":{"position":[[1001,35]]}},"keywords":{}}],["describ",{"_index":1051,"title":{},"content":{"92":{"position":[[1127,9]]}},"keywords":{}}],["describe('administrationpolicystor",{"_index":1052,"title":{},"content":{"92":{"position":[[1138,37]]}},"keywords":{}}],["describe('bookspolicystor",{"_index":1059,"title":{},"content":{"92":{"position":[[2140,28],[2879,28]]}},"keywords":{}}],["describe('calcacceptableag",{"_index":1102,"title":{},"content":{"93":{"position":[[652,29]]}},"keywords":{}}],["describe('goodsliststor",{"_index":1123,"title":{},"content":{"94":{"position":[[1617,26]]},"95":{"position":[[279,26]]}},"keywords":{}}],["describe('добавлен",{"_index":1053,"title":{},"content":{"92":{"position":[[1187,20],[2180,20],[3641,20]]},"94":{"position":[[1655,20]]},"95":{"position":[[317,20]]}},"keywords":{}}],["describe('доступ",{"_index":1103,"title":{},"content":{"93":{"position":[[693,17]]}},"keywords":{}}],["dev",{"_index":161,"title":{"14":{"position":[[0,3]]}},"content":{"13":{"position":[[372,3],[582,3]]},"15":{"position":[[88,3]]}},"keywords":{}}],["doc",{"_index":571,"title":{},"content":{"47":{"position":[[246,4],[462,4],[689,4],[718,4]]}},"keywords":{}}],["docact",{"_index":404,"title":{},"content":{"33":{"position":[[638,11]]},"34":{"position":[[45,10],[219,10],[447,11]]},"47":{"position":[[268,11],[625,10]]}},"keywords":{}}],["docker",{"_index":130,"title":{},"content":{"11":{"position":[[488,6],[693,6]]},"12":{"position":[[105,6]]},"13":{"position":[[396,6],[926,6]]},"17":{"position":[[26,6]]}},"keywords":{}}],["dockerfil",{"_index":209,"title":{},"content":{"17":{"position":[[1,11],[152,10]]}},"keywords":{}}],["domain",{"_index":984,"title":{},"content":{"82":{"position":[[682,18]]},"84":{"position":[[80,15],[135,15]]}},"keywords":{}}],["dx",{"_index":457,"title":{},"content":{"38":{"position":[[122,2]]},"53":{"position":[[2204,2]]}},"keywords":{}}],["entrypoint",{"_index":235,"title":{},"content":{"17":{"position":[[611,10]]}},"keywords":{}}],["enum",{"_index":604,"title":{"57":{"position":[[29,5]]}},"content":{"52":{"position":[[223,20]]},"57":{"position":[[124,4],[291,4],[580,4],[952,4]]},"69":{"position":[[309,20]]}},"keywords":{}}],["enums.t",{"_index":586,"title":{},"content":{"49":{"position":[[333,8]]},"86":{"position":[[308,8]]}},"keywords":{}}],["env",{"_index":1,"title":{"0":{"position":[[9,3]]},"3":{"position":[[45,3]]},"9":{"position":[[26,3]]},"11":{"position":[[19,3]]},"12":{"position":[[30,4]]},"19":{"position":[[14,3]]},"20":{"position":[[20,3]]}},"content":{"1":{"position":[[69,3]]},"2":{"position":[[104,4],[156,3]]},"4":{"position":[[10,3],[116,3],[246,3]]},"6":{"position":[[38,3],[98,3]]},"11":{"position":[[11,3],[138,3],[345,3],[670,3]]},"12":{"position":[[30,3],[170,3]]},"13":{"position":[[619,3],[786,3]]},"17":{"position":[[135,4],[607,3],[837,3]]},"18":{"position":[[18,3]]},"19":{"position":[[254,3]]},"20":{"position":[[8,3],[33,3],[168,3],[236,3]]}},"keywords":{}}],["env.dev",{"_index":199,"title":{},"content":{"15":{"position":[[180,9]]}},"keywords":{}}],["env.loc",{"_index":198,"title":{},"content":{"15":{"position":[[164,10]]}},"keywords":{}}],["envprefix",{"_index":61,"title":{},"content":{"5":{"position":[[184,9]]}},"keywords":{}}],["envsubst",{"_index":270,"title":{},"content":{"18":{"position":[[539,8],[733,8]]}},"keywords":{}}],["error",{"_index":728,"title":{},"content":{"57":{"position":[[681,7]]}},"keywords":{}}],["errorlist",{"_index":785,"title":{},"content":{"63":{"position":[[544,10]]}},"keywords":{}}],["errorst",{"_index":784,"title":{},"content":{"63":{"position":[[530,13]]}},"keywords":{}}],["etc/nginx/nginx.conf",{"_index":280,"title":{},"content":{"18":{"position":[[812,21]]}},"keywords":{}}],["etc/nginx/nginx.conf.templ",{"_index":226,"title":{},"content":{"17":{"position":[[441,30]]},"18":{"position":[[776,30]]}},"keywords":{}}],["exampl",{"_index":864,"title":{},"content":{"70":{"position":[[140,8]]}},"keywords":{}}],["example/data",{"_index":602,"title":{},"content":{"52":{"position":[[167,16]]},"53":{"position":[[289,16],[361,16]]},"69":{"position":[[253,16]]}},"keywords":{}}],["example/modules/permiss",{"_index":674,"title":{},"content":{"56":{"position":[[1880,31]]},"71":{"position":[[1017,31]]},"79":{"position":[[488,31],[875,31]]},"82":{"position":[[1562,31]]}},"keywords":{}}],["example/screen",{"_index":948,"title":{},"content":{"79":{"position":[[436,19],[766,19]]},"82":{"position":[[1510,19]]}},"keywords":{}}],["example/shar",{"_index":958,"title":{},"content":{"79":{"position":[[818,18]]},"82":{"position":[[606,18]]},"84":{"position":[[29,18]]}},"keywords":{}}],["exec",{"_index":231,"title":{},"content":{"17":{"position":[[563,4]]}},"keywords":{}}],["expect(notifymock.info).tobecalledwith('книг",{"_index":1141,"title":{},"content":{"95":{"position":[[901,45]]}},"keywords":{}}],["expect(permission.isallowed).tobefalsi",{"_index":1105,"title":{},"content":{"93":{"position":[[822,41]]}},"keywords":{}}],["expect(permission.reason).tobe(permissiondenialreason.missingdata",{"_index":1106,"title":{},"content":{"93":{"position":[[864,67]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobefalsi",{"_index":1084,"title":{},"content":{"92":{"position":[[4261,48]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobetruthi",{"_index":1064,"title":{},"content":{"92":{"position":[[2324,49],[3785,49],[5345,49]]}},"keywords":{}}],["expect(sut.addingtoshelf.reason).tob",{"_index":1085,"title":{},"content":{"92":{"position":[[4310,38]]}},"keywords":{}}],["expect(sut.isopenaccountpayment).tobetruthi",{"_index":1142,"title":{},"content":{"95":{"position":[[1360,46]]}},"keywords":{}}],["export",{"_index":276,"title":{},"content":{"18":{"position":[[620,6]]},"43":{"position":[[179,6],[1208,6]]},"52":{"position":[[388,6]]},"53":{"position":[[839,6],[1690,6],[1807,6]]},"56":{"position":[[691,6],[1912,6],[2873,6],[3050,6]]},"57":{"position":[[284,6],[573,6],[945,6]]},"61":{"position":[[320,6]]},"62":{"position":[[350,6]]},"63":{"position":[[104,6]]},"64":{"position":[[585,6],[1468,6]]},"69":{"position":[[474,6]]},"71":{"position":[[1049,6],[1586,6],[1894,6]]},"79":{"position":[[647,6],[1177,6]]},"82":{"position":[[797,6],[1721,6]]},"84":{"position":[[418,6]]},"89":{"position":[[655,6],[1300,6],[2154,6]]},"92":{"position":[[17,6]]},"93":{"position":[[223,6]]},"94":{"position":[[244,6]]}},"keywords":{}}],["extend",{"_index":1131,"title":{},"content":{"95":{"position":[[84,8],[181,10]]}},"keywords":{}}],["extern",{"_index":673,"title":{},"content":{"56":{"position":[[1790,8]]}},"keywords":{}}],["factor",{"_index":475,"title":{"42":{"position":[[9,6]]}},"content":{},"keywords":{}}],["fals",{"_index":676,"title":{},"content":{"56":{"position":[[1961,6],[2861,6]]},"64":{"position":[[1517,6],[2393,6]]},"65":{"position":[[194,6]]},"92":{"position":[[4220,6],[4248,5],[5205,6]]},"94":{"position":[[297,6],[1578,6]]}},"keywords":{}}],["featur",{"_index":470,"title":{"40":{"position":[[0,7]]},"41":{"position":[[31,7]]}},"content":{"41":{"position":[[32,7],[73,7],[145,7]]},"43":{"position":[[873,8]]},"65":{"position":[[41,9]]},"67":{"position":[[284,7]]},"68":{"position":[[589,7]]},"71":{"position":[[855,8]]},"73":{"position":[[1490,8]]},"77":{"position":[[112,9]]},"79":{"position":[[204,9]]}},"keywords":{}}],["featuretoggl",{"_index":465,"title":{},"content":{"38":{"position":[[353,13]]}},"keywords":{}}],["fholzer/nginx",{"_index":223,"title":{},"content":{"17":{"position":[[380,13]]}},"keywords":{}}],["from=build",{"_index":227,"title":{},"content":{"17":{"position":[[479,10]]}},"keywords":{}}],["frontend",{"_index":79,"title":{},"content":{"7":{"position":[[108,8]]}},"keywords":{}}],["frontend'е",{"_index":354,"title":{},"content":{"32":{"position":[[142,10]]}},"keywords":{}}],["frontend.shar",{"_index":91,"title":{},"content":{"8":{"position":[[97,16]]}},"keywords":{}}],["generateenv.dev.sh",{"_index":193,"title":{"15":{"position":[[22,18]]}},"content":{"15":{"position":[[8,18]]}},"keywords":{}}],["getbillinginfoqueri",{"_index":1077,"title":{},"content":{"92":{"position":[[3356,20]]}},"keywords":{}}],["getdateyeardiff(new",{"_index":1031,"title":{},"content":{"89":{"position":[[929,20]]}},"keywords":{}}],["getrolesqueri",{"_index":1073,"title":{},"content":{"92":{"position":[[3204,14]]}},"keywords":{}}],["github",{"_index":93,"title":{},"content":{"8":{"position":[[131,7]]}},"keywords":{}}],["gitignor",{"_index":155,"title":{},"content":{"13":{"position":[[160,11],[556,12],[669,11]]}},"keywords":{}}],["global.d.t",{"_index":285,"title":{},"content":{"19":{"position":[[77,12]]}},"keywords":{}}],["gt",{"_index":166,"title":{},"content":{"13":{"position":[[460,4]]},"18":{"position":[[807,4]]},"43":{"position":[[568,5],[775,5],[1487,5]]},"52":{"position":[[929,5]]},"53":{"position":[[1547,5]]},"56":{"position":[[1041,5],[1293,5],[1555,5],[2181,5],[2760,5],[2829,5],[2919,5],[3099,5],[3179,5],[3254,5],[3419,5]]},"61":{"position":[[754,5],[1050,5],[1312,5]]},"62":{"position":[[1058,5]]},"63":{"position":[[135,5],[260,5],[431,5],[624,4]]},"64":{"position":[[901,5],[1059,5],[1108,5],[1859,5],[2292,5],[2361,5]]},"69":{"position":[[825,5],[1032,5]]},"70":{"position":[[223,5]]},"71":{"position":[[514,5],[728,5],[1084,5],[1315,5],[1929,5]]},"73":{"position":[[364,5],[582,5],[795,5],[1348,5]]},"75":{"position":[[119,5],[189,5]]},"79":{"position":[[546,5],[610,5],[934,5],[1048,6],[1134,5]]},"82":{"position":[[859,5],[1167,5],[1179,5],[1191,4],[1620,5],[1684,5]]},"84":{"position":[[498,5],[768,6],[925,6],[987,6]]},"89":{"position":[[739,5],[770,5],[1616,5],[1774,5],[1823,5],[2515,5],[2783,5],[2841,5]]},"90":{"position":[[122,5],[249,5],[313,5],[401,5]]},"92":{"position":[[367,5],[619,5],[881,5],[1179,5],[1228,5],[1485,5],[1898,5],[2172,5],[2221,5],[2268,5],[2429,5],[2504,5],[2593,5],[2703,5],[2911,5],[3053,5],[3222,5],[3273,5],[3380,5],[3433,5],[3682,5],[3729,5],[4173,5],[4547,5],[4809,5],[5158,5]]},"93":{"position":[[307,5],[338,5],[685,5],[720,5],[774,5],[992,5],[1067,5],[1199,5]]},"94":{"position":[[474,5],[1465,5],[1542,5],[1647,5],[1696,5],[1786,5],[1888,5],[1996,5],[2115,5]]},"95":{"position":[[309,5],[358,5],[421,5],[664,5],[1067,5]]}},"keywords":{}}],["guard",{"_index":332,"title":{"29":{"position":[[6,7]]},"30":{"position":[[20,7]]},"76":{"position":[[6,7]]},"78":{"position":[[0,5]]},"81":{"position":[[15,6]]}},"content":{"77":{"position":[[11,6]]},"78":{"position":[[7,5],[109,5]]},"80":{"position":[[21,5],[131,6]]},"81":{"position":[[69,6],[182,5],[313,6]]},"82":{"position":[[416,6]]}},"keywords":{}}],["hasreason",{"_index":866,"title":{},"content":{"70":{"position":[[195,10]]}},"keywords":{}}],["header",{"_index":991,"title":{},"content":{"82":{"position":[[1030,9]]}},"keywords":{}}],["html",{"_index":141,"title":{},"content":{"11":{"position":[[676,4]]},"12":{"position":[[165,4]]},"13":{"position":[[73,5]]}},"keywords":{}}],["http",{"_index":257,"title":{},"content":{"18":{"position":[[287,4]]}},"keywords":{}}],["https://github.com/kaluga",{"_index":318,"title":{},"content":{"22":{"position":[[1,25]]},"23":{"position":[[1,25]]},"24":{"position":[[1,25]]},"25":{"position":[[1,25]]},"26":{"position":[[1,25]]},"27":{"position":[[1,25]]},"28":{"position":[[1,25]]},"29":{"position":[[1,25]]}},"keywords":{}}],["id",{"_index":695,"title":{},"content":{"56":{"position":[[3035,3],[3086,2]]},"79":{"position":[[950,2],[979,5]]},"95":{"position":[[947,2]]}},"keywords":{}}],["id={id",{"_index":966,"title":{},"content":{"79":{"position":[[1126,7]]}},"keywords":{}}],["id={id}>",{"_index":964,"title":{},"content":{"79":{"position":[[1092,11]]}},"keywords":{}}],["imag",{"_index":131,"title":{},"content":{"11":{"position":[[495,6]]}},"keywords":{}}],["import",{"_index":598,"title":{},"content":{"52":{"position":[[88,6],[131,6],[184,6],[322,6]]},"53":{"position":[[196,6],[239,6],[306,6],[458,6],[521,6],[585,6],[698,6]]},"56":{"position":[[625,6],[1804,6]]},"57":{"position":[[887,6]]},"61":{"position":[[254,6]]},"62":{"position":[[182,6],[245,6]]},"64":{"position":[[536,6]]},"69":{"position":[[174,6],[217,6],[270,6],[408,6]]},"71":{"position":[[940,6],[984,6]]},"79":{"position":[[401,6],[456,6],[716,6],[786,6],[837,6]]},"82":{"position":[[482,6],[522,6],[566,6],[625,6],[701,6],[1475,6],[1530,6]]},"84":{"position":[[1,6],[48,6],[96,6]]},"89":{"position":[[605,6],[1251,6],[2105,6]]},"95":{"position":[[143,6],[192,6]]}},"keywords":{}}],["import.meta.env",{"_index":111,"title":{},"content":{"11":{"position":[[144,15]]}},"keywords":{}}],["index.html",{"_index":144,"title":{"12":{"position":[[10,10]]},"13":{"position":[[10,10]]},"15":{"position":[[10,11]]},"17":{"position":[[10,11]]},"20":{"position":[[26,11]]}},"content":{"12":{"position":[[136,10]]},"13":{"position":[[113,11],[126,10],[543,10],[636,11]]},"15":{"position":[[251,10],[414,10]]},"17":{"position":[[98,10],[879,10],[944,10]]}},"keywords":{}}],["index.t",{"_index":584,"title":{},"content":{"49":{"position":[[267,8],[316,8],[350,8]]},"77":{"position":[[222,8],[241,8],[258,8]]},"79":{"position":[[314,8],[333,8],[350,8]]},"86":{"position":[[242,8],[291,8],[325,8]]}},"keywords":{}}],["index.template.html",{"_index":147,"title":{"13":{"position":[[24,20]]}},"content":{"13":{"position":[[40,19],[184,20],[213,19],[234,19],[514,19]]},"15":{"position":[[286,20]]}},"keywords":{}}],["index.template.htmlзаменя",{"_index":242,"title":{},"content":{"17":{"position":[[914,27]]}},"keywords":{}}],["info",{"_index":1088,"title":{},"content":{"92":{"position":[[5239,5]]}},"keywords":{}}],["inject",{"_index":140,"title":{"12":{"position":[[23,6]]},"20":{"position":[[13,6]]}},"content":{"11":{"position":[[663,6]]},"13":{"position":[[612,6],[779,6]]},"20":{"position":[[1,6]]}},"keywords":{}}],["interfac",{"_index":286,"title":{},"content":{"19":{"position":[[91,9]]}},"keywords":{}}],["intern",{"_index":727,"title":{},"content":{"57":{"position":[[671,9]]}},"keywords":{}}],["internalerror",{"_index":726,"title":{},"content":{"57":{"position":[[655,13],[1032,13]]}},"keywords":{}}],["intro",{"_index":63,"title":{"6":{"position":[[0,5]]},"7":{"position":[[0,5]]},"35":{"position":[[0,5]]}},"content":{"6":{"position":[[0,5]]},"7":{"position":[[0,5]]}},"keywords":{}}],["invalid",{"_index":922,"title":{},"content":{"74":{"position":[[456,7]]},"75":{"position":[[137,7]]},"90":{"position":[[266,7]]}},"keywords":{}}],["isaddtoshelf",{"_index":924,"title":{},"content":{"74":{"position":[[512,14]]}},"keywords":{}}],["isadmin",{"_index":1063,"title":{},"content":{"92":{"position":[[2306,8],[2942,8],[2969,8],[3282,8],[3767,8],[4211,8],[5196,8]]}},"keywords":{}}],["isallow",{"_index":832,"title":{},"content":{"65":{"position":[[183,10]]},"70":{"position":[[63,10]]}},"keywords":{}}],["isallowedbookcr",{"_index":635,"title":{},"content":{"53":{"position":[[1955,23]]},"71":{"position":[[1734,23],[1946,21],[2043,22]]}},"keywords":{}}],["iserror={permissionsstatus.iserror",{"_index":782,"title":{},"content":{"63":{"position":[[454,35]]}},"keywords":{}}],["isloading={permissionsstatus.isload",{"_index":783,"title":{},"content":{"63":{"position":[[490,39]]}},"keywords":{}}],["isopen={isopenpayaccount",{"_index":708,"title":{},"content":{"56":{"position":[[3367,25]]}},"keywords":{}}],["isopenaccountpay",{"_index":1111,"title":{},"content":{"94":{"position":[[274,20]]}},"keywords":{}}],["isopenpayaccount",{"_index":675,"title":{},"content":{"56":{"position":[[1942,16],[3128,17]]},"64":{"position":[[1498,16]]}},"keywords":{}}],["issu",{"_index":82,"title":{"8":{"position":[[0,6]]}},"content":{"8":{"position":[[0,6]]}},"keywords":{}}],["it('доступ",{"_index":1107,"title":{},"content":{"93":{"position":[[1082,10]]}},"keywords":{}}],["it('доступн",{"_index":1060,"title":{},"content":{"92":{"position":[[2229,12],[2604,13],[3690,12],[5059,13]]}},"keywords":{}}],["it('есл",{"_index":1104,"title":{},"content":{"93":{"position":[[728,8],[936,8],[1003,8]]}},"keywords":{}}],["it('недоступн",{"_index":1065,"title":{},"content":{"92":{"position":[[2378,15],[2440,15],[2515,15],[4122,15]]}},"keywords":{}}],["it('открыва",{"_index":1125,"title":{},"content":{"94":{"position":[[1797,13]]},"95":{"position":[[976,13]]}},"keywords":{}}],["it('показыва",{"_index":1124,"title":{},"content":{"94":{"position":[[1704,14],[1899,14],[2007,14]]},"95":{"position":[[582,14]]}},"keywords":{}}],["js",{"_index":117,"title":{},"content":{"11":{"position":[[244,2],[307,2]]}},"keywords":{}}],["jsdoc",{"_index":742,"title":{},"content":{"58":{"position":[[60,5]]}},"keywords":{}}],["kebab",{"_index":746,"title":{},"content":{"58":{"position":[[143,5]]}},"keywords":{}}],["label",{"_index":126,"title":{},"content":{"11":{"position":[[429,6]]}},"keywords":{}}],["listen",{"_index":258,"title":{},"content":{"18":{"position":[[307,6],[318,6]]}},"keywords":{}}],["lite",{"_index":877,"title":{},"content":{"71":{"position":[[977,6]]},"82":{"position":[[559,6]]}},"keywords":{}}],["lock.json",{"_index":219,"title":{},"content":{"17":{"position":[[311,10]]}},"keywords":{}}],["lt",{"_index":160,"title":{},"content":{"13":{"position":[[352,5]]},"18":{"position":[[771,4]]},"89":{"position":[[982,4]]},"93":{"position":[[561,4]]}},"keywords":{}}],["lt;>",{"_index":700,"title":{},"content":{"56":{"position":[[3214,8]]}},"keywords":{}}],["lt;/>",{"_index":710,"title":{},"content":{"56":{"position":[[3425,9]]}},"keywords":{}}],["lt;/adminrouteguard>",{"_index":952,"title":{},"content":{"79":{"position":[[616,24]]},"82":{"position":[[1690,24]]}},"keywords":{}}],["lt;/container>",{"_index":706,"title":{},"content":{"56":{"position":[[3328,18]]}},"keywords":{}}],["lt;/contentstate>",{"_index":789,"title":{},"content":{"63":{"position":[[681,21]]}},"keywords":{}}],["lt;/permissionguard>",{"_index":997,"title":{},"content":{"82":{"position":[[1207,24]]}},"keywords":{}}],["lt;/readingbookrouteguard>",{"_index":967,"title":{},"content":{"79":{"position":[[1140,30]]}},"keywords":{}}],["lt;/routerlink>",{"_index":883,"title":{},"content":{"71":{"position":[[1293,19],[2157,19]]}},"keywords":{}}],["lt;/script>",{"_index":168,"title":{},"content":{"13":{"position":[[484,15]]}},"keywords":{}}],["lt;/sidebar>",{"_index":884,"title":{},"content":{"71":{"position":[[1321,16],[2201,16]]}},"keywords":{}}],["lt;/sidebaritem>",{"_index":895,"title":{},"content":{"71":{"position":[[2180,20]]}},"keywords":{}}],["lt;/themeprovider>",{"_index":790,"title":{},"content":{"63":{"position":[[703,22]]}},"keywords":{}}],["lt;adminrouteguard>",{"_index":950,"title":{},"content":{"79":{"position":[[563,23]]},"82":{"position":[[1637,23]]}},"keywords":{}}],["lt;bookinfo",{"_index":702,"title":{},"content":{"56":{"position":[[3241,12]]}},"keywords":{}}],["lt;button",{"_index":703,"title":{},"content":{"56":{"position":[[3260,10]]}},"keywords":{}}],["lt;container>",{"_index":701,"title":{},"content":{"56":{"position":[[3223,17]]}},"keywords":{}}],["lt;contentst",{"_index":781,"title":{},"content":{"63":{"position":[[437,16]]}},"keywords":{}}],["lt;creationbookscreen",{"_index":951,"title":{},"content":{"79":{"position":[[587,22]]},"82":{"position":[[1661,22]]}},"keywords":{}}],["lt;head>",{"_index":159,"title":{},"content":{"13":{"position":[[322,13]]}},"keywords":{}}],["lt;mainlayout>{renderroutes}</mainlayout>",{"_index":788,"title":{},"content":{"63":{"position":[[629,51]]}},"keywords":{}}],["lt;notfoundscreen",{"_index":960,"title":{},"content":{"79":{"position":[[994,18]]}},"keywords":{}}],["lt;notificationcontain",{"_index":780,"title":{},"content":{"63":{"position":[[405,25]]}},"keywords":{}}],["lt;pagelayout",{"_index":990,"title":{},"content":{"82":{"position":[[1015,14]]}},"keywords":{}}],["lt;payaccountmod",{"_index":707,"title":{},"content":{"56":{"position":[[3347,19]]}},"keywords":{}}],["lt;permissionguard",{"_index":987,"title":{},"content":{"82":{"position":[[876,19]]}},"keywords":{}}],["lt;permissionsgateway",{"_index":879,"title":{},"content":{"71":{"position":[[1117,22]]}},"keywords":{}}],["lt;placehold",{"_index":994,"title":{},"content":{"82":{"position":[[1097,15]]},"84":{"position":[[706,15],[851,15],[941,15]]}},"keywords":{}}],["lt;readingbookrouteguard",{"_index":963,"title":{},"content":{"79":{"position":[[1066,25]]}},"keywords":{}}],["lt;readingbookscreen",{"_index":965,"title":{},"content":{"79":{"position":[[1104,21]]}},"keywords":{}}],["lt;routerlink",{"_index":881,"title":{},"content":{"71":{"position":[[1215,14],[2079,14]]}},"keywords":{}}],["lt;script>",{"_index":158,"title":{},"content":{"13":{"position":[[305,14],[337,14]]}},"keywords":{}}],["lt;sidebar>",{"_index":878,"title":{},"content":{"71":{"position":[[1101,15],[2007,15]]}},"keywords":{}}],["lt;sidebaritem>",{"_index":893,"title":{},"content":{"71":{"position":[[2023,19]]}},"keywords":{}}],["lt;themeprovid",{"_index":778,"title":{},"content":{"63":{"position":[[369,17]]}},"keywords":{}}],["makeautoobserv",{"_index":599,"title":{},"content":{"52":{"position":[[97,18]]},"53":{"position":[[205,18]]},"69":{"position":[[183,18]]}},"keywords":{}}],["makeautoobservable(thi",{"_index":491,"title":{},"content":{"43":{"position":[[403,24],[1407,24]]},"52":{"position":[[574,24]]},"53":{"position":[[1095,24],[1892,24]]},"56":{"position":[[911,24],[2106,24]]},"61":{"position":[[540,24]]},"62":{"position":[[606,24]]},"64":{"position":[[769,24],[1706,24]]},"69":{"position":[[660,24]]},"71":{"position":[[363,24],[1671,24]]},"89":{"position":[[1484,24],[2385,24]]},"92":{"position":[[237,24]]},"94":{"position":[[409,25]]}},"keywords":{}}],["math.abs(getdateyeardiff(new",{"_index":1101,"title":{},"content":{"93":{"position":[[499,28]]}},"keywords":{}}],["miss",{"_index":731,"title":{},"content":{"57":{"position":[[760,8]]}},"keywords":{}}],["missingdata",{"_index":730,"title":{},"content":{"57":{"position":[[746,11],[1139,11]]}},"keywords":{}}],["mobx",{"_index":600,"title":{},"content":{"52":{"position":[[123,7]]},"53":{"position":[[231,7]]},"69":{"position":[[209,7]]},"71":{"position":[[965,5]]},"82":{"position":[[547,5]]}},"keywords":{}}],["mock",{"_index":1130,"title":{},"content":{"95":{"position":[[79,4],[176,4]]}},"keywords":{}}],["mock<billingrepository>",{"_index":1076,"title":{},"content":{"92":{"position":[[3324,31]]}},"keywords":{}}],["mock<notify>",{"_index":1136,"title":{},"content":{"95":{"position":[[448,21]]}},"keywords":{}}],["mock<userrepository>",{"_index":1072,"title":{},"content":{"92":{"position":[[3175,28]]}},"keywords":{}}],["mockdeep",{"_index":1127,"title":{},"content":{"95":{"position":[[49,8],[152,8]]}},"keywords":{}}],["mockdeep<permissionsstore>",{"_index":1139,"title":{},"content":{"95":{"position":[[756,34],[1185,34]]}},"keywords":{}}],["mode",{"_index":192,"title":{"14":{"position":[[4,5]]},"16":{"position":[[5,5]]}},"content":{},"keywords":{}}],["modul",{"_index":317,"title":{"22":{"position":[[12,7]]},"44":{"position":[[19,6]]}},"content":{"49":{"position":[[52,8]]},"51":{"position":[[1,7],[192,8]]},"77":{"position":[[76,8]]},"79":{"position":[[168,8]]},"86":{"position":[[48,8]]},"94":{"position":[[143,7]]}},"keywords":{}}],["modules/books/features/bookcard/bookcard.tsx",{"_index":693,"title":{},"content":{"56":{"position":[[2974,44]]}},"keywords":{}}],["modules/books/features/bookcard/uistor",{"_index":672,"title":{},"content":{"56":{"position":[[1676,39]]},"64":{"position":[[1427,39]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/sidebar.tsx",{"_index":891,"title":{},"content":{"71":{"position":[[1838,54]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/uistor",{"_index":518,"title":{},"content":{"43":{"position":[[1156,50]]},"71":{"position":[[1534,50]]}},"keywords":{}}],["modules/permissions/domain/enums.t",{"_index":716,"title":{},"content":{"57":{"position":[[246,36]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/administrationpolicystor",{"_index":480,"title":{},"content":{"43":{"position":[[92,85]]},"52":{"position":[[1,85]]},"69":{"position":[[87,85]]},"71":{"position":[[130,85]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolici",{"_index":659,"title":{},"content":{"56":{"position":[[474,71]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolicystor",{"_index":1036,"title":{},"content":{"89":{"position":[[2027,76]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystor",{"_index":1035,"title":{},"content":{"89":{"position":[[1171,78]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/rules/calcacceptableag",{"_index":1026,"title":{},"content":{"89":{"position":[[449,74]]}},"keywords":{}}],["modules/permissions/features/routeguard",{"_index":929,"title":{},"content":{"77":{"position":[[29,41]]},"81":{"position":[[3,40]]}},"keywords":{}}],["modules/permissions/features/routeguards/adminrouteguard",{"_index":980,"title":{},"content":{"82":{"position":[[424,56]]}},"keywords":{}}],["monitoringdsn",{"_index":297,"title":{},"content":{"19":{"position":[[397,14]]}},"keywords":{}}],["monitoringreleas",{"_index":301,"title":{},"content":{"19":{"position":[[497,18]]}},"keywords":{}}],["monitoringstand",{"_index":299,"title":{},"content":{"19":{"position":[[446,16]]}},"keywords":{}}],["name",{"_index":496,"title":{},"content":{"43":{"position":[[501,5]]},"52":{"position":[[772,5]]},"56":{"position":[[1004,5]]},"61":{"position":[[633,5]]},"64":{"position":[[862,5]]},"69":{"position":[[758,5]]},"71":{"position":[[447,5]]},"89":{"position":[[1577,5],[2478,5]]},"92":{"position":[[330,5]]}},"keywords":{}}],["new",{"_index":633,"title":{},"content":{"53":{"position":[[1722,3]]},"56":{"position":[[2925,3]]},"89":{"position":[[970,3]]},"92":{"position":[[3511,3]]},"93":{"position":[[548,3]]},"95":{"position":[[482,3]]}},"keywords":{}}],["next_priv",{"_index":50,"title":{},"content":{"4":{"position":[[285,13]]}},"keywords":{}}],["next_publ",{"_index":48,"title":{},"content":{"4":{"position":[[271,11]]}},"keywords":{}}],["nextj",{"_index":14,"title":{"2":{"position":[[0,7]]}},"content":{"2":{"position":[[0,7],[47,7]]},"4":{"position":[[220,6]]}},"keywords":{}}],["nginx",{"_index":94,"title":{"9":{"position":[[6,6]]},"18":{"position":[[25,6]]}},"content":{"13":{"position":[[890,6]]},"17":{"position":[[1080,5],[1141,5]]},"18":{"position":[[988,5]]}},"keywords":{}}],["nginx.conf",{"_index":248,"title":{},"content":{"18":{"position":[[49,11],[77,10],[722,10],[935,11]]}},"keywords":{}}],["nginx.conf.templ",{"_index":251,"title":{},"content":{"18":{"position":[[144,20],[674,19],[875,19]]}},"keywords":{}}],["nginx.conf.замен",{"_index":253,"title":{},"content":{"18":{"position":[[208,19]]}},"keywords":{}}],["nginx/nginx.conf.templ",{"_index":225,"title":{},"content":{"17":{"position":[[414,26]]}},"keywords":{}}],["noadmin",{"_index":717,"title":{},"content":{"57":{"position":[[361,7],[1230,7]]}},"keywords":{}}],["node:22",{"_index":212,"title":{},"content":{"17":{"position":[[240,7]]}},"keywords":{}}],["nodej",{"_index":181,"title":{},"content":{"13":{"position":[[948,7],[980,7]]}},"keywords":{}}],["nopayaccount",{"_index":718,"title":{},"content":{"57":{"position":[[414,12]]},"95":{"position":[[1143,12]]}},"keywords":{}}],["notfoundscreen",{"_index":955,"title":{},"content":{"79":{"position":[[725,15]]}},"keywords":{}}],["notifi",{"_index":521,"title":{},"content":{"43":{"position":[[1362,7]]},"56":{"position":[[2094,7],[2963,8]]},"64":{"position":[[1650,7]]},"94":{"position":[[397,7]]}},"keywords":{}}],["notifymock",{"_index":1135,"title":{},"content":{"95":{"position":[[435,10],[516,12],[560,11],[857,10]]}},"keywords":{}}],["notifyservic",{"_index":520,"title":{},"content":{"43":{"position":[[1347,14]]},"56":{"position":[[2079,14]]},"64":{"position":[[1635,14]]},"94":{"position":[[382,14]]}},"keywords":{}}],["npm",{"_index":221,"title":{},"content":{"17":{"position":[[338,3],[361,3]]}},"keywords":{}}],["number",{"_index":808,"title":{},"content":{"64":{"position":[[1051,7]]},"89":{"position":[[706,7],[1766,7],[2775,7]]},"93":{"position":[[274,7]]}},"keywords":{}}],["observ",{"_index":697,"title":{},"content":{"56":{"position":[[3074,11]]},"63":{"position":[[123,11]]},"71":{"position":[[949,8],[1072,11],[1917,11]]},"82":{"position":[[531,8],[828,11]]}},"keywords":{}}],["onclick={addtoshelf}>добав",{"_index":704,"title":{},"content":{"56":{"position":[[3271,32]]}},"keywords":{}}],["onclose={closepayaccount",{"_index":709,"title":{},"content":{"56":{"position":[[3393,25]]}},"keywords":{}}],["onretri",{"_index":787,"title":{},"content":{"63":{"position":[[582,8]]}},"keywords":{}}],["opendoccr",{"_index":523,"title":{},"content":{"43":{"position":[[1466,15]]}},"keywords":{}}],["openpayaccount",{"_index":688,"title":{},"content":{"56":{"position":[[2740,14]]},"64":{"position":[[2272,14]]}},"keywords":{}}],["openpaymentaccount",{"_index":1120,"title":{},"content":{"94":{"position":[[1441,18]]}},"keywords":{}}],["organ",{"_index":574,"title":{},"content":{"47":{"position":[[317,12],[373,12],[696,13],[725,12]]}},"keywords":{}}],["organizationmanag",{"_index":920,"title":{},"content":{"74":{"position":[[264,22],[419,24]]}},"keywords":{}}],["overhead",{"_index":970,"title":{},"content":{"80":{"position":[[65,9]]}},"keywords":{}}],["packag",{"_index":218,"title":{},"content":{"17":{"position":[[303,7]]}},"keywords":{}}],["package.json",{"_index":217,"title":{},"content":{"17":{"position":[[290,12]]}},"keywords":{}}],["page",{"_index":337,"title":{"78":{"position":[[28,5]]}},"content":{"30":{"position":[[24,4]]},"78":{"position":[[41,5],[127,4],[187,5]]},"79":{"position":[[20,6],[81,6]]}},"keywords":{}}],["pagebook",{"_index":335,"title":{},"content":{"30":{"position":[[7,8]]}},"keywords":{}}],["pagelayout",{"_index":982,"title":{},"content":{"82":{"position":[[575,11]]}},"keywords":{}}],["paid",{"_index":1083,"title":{},"content":{"92":{"position":[[4242,5],[5227,5]]}},"keywords":{}}],["partial<billingrepositorydto.billinginfo>",{"_index":1068,"title":{},"content":{"92":{"position":[[3001,48]]}},"keywords":{}}],["pay",{"_index":719,"title":{},"content":{"57":{"position":[[433,3]]}},"keywords":{}}],["payment",{"_index":803,"title":{},"content":{"64":{"position":[[868,10]]},"89":{"position":[[1583,10]]}},"keywords":{}}],["paymentaccount",{"_index":393,"title":{},"content":{"33":{"position":[[319,16]]}},"keywords":{}}],["paymentaccountfreeaccount",{"_index":379,"title":{},"content":{"33":{"position":[[32,25]]}},"keywords":{}}],["paymentpolicystor",{"_index":583,"title":{},"content":{"49":{"position":[[233,19]]},"53":{"position":[[757,19]]},"64":{"position":[[598,18]]},"89":{"position":[[1078,18],[1313,18]]}},"keywords":{}}],["paypermiss",{"_index":820,"title":{},"content":{"64":{"position":[[1873,13]]}},"keywords":{}}],["paypermission.hasreason(permissiondenialreason.notacceptag",{"_index":824,"title":{},"content":{"64":{"position":[[2053,62]]}},"keywords":{}}],["paypermission.isallow",{"_index":822,"title":{},"content":{"64":{"position":[[1956,25]]}},"keywords":{}}],["permiss",{"_index":316,"title":{"22":{"position":[[0,11]]},"27":{"position":[[14,11]]},"40":{"position":[[17,11]]},"41":{"position":[[0,11]]},"44":{"position":[[7,11]]},"45":{"position":[[7,11]]},"67":{"position":[[13,11]]},"69":{"position":[[9,11]]},"70":{"position":[[4,11]]},"71":{"position":[[34,11]]},"72":{"position":[[0,10]]},"87":{"position":[[33,12]]},"94":{"position":[[36,12]]},"95":{"position":[[4,12]]}},"content":{"33":{"position":[[627,10]]},"34":{"position":[[26,11]]},"41":{"position":[[1,11],[102,13],[194,12]]},"43":{"position":[[1261,12],[1501,10]]},"47":{"position":[[596,11]]},"49":{"position":[[67,12]]},"51":{"position":[[66,11],[211,10]]},"52":{"position":[[712,11]]},"53":{"position":[[1859,12]]},"54":{"position":[[77,11],[116,11]]},"56":{"position":[[2031,12]]},"57":{"position":[[60,11]]},"62":{"position":[[1675,10]]},"63":{"position":[[790,11]]},"64":{"position":[[463,11],[1414,11],[1587,12]]},"65":{"position":[[27,11],[88,11],[376,12]]},"67":{"position":[[21,11],[249,10]]},"68":{"position":[[74,10],[346,10],[575,11],[785,10],[961,11]]},"69":{"position":[[1,11]]},"70":{"position":[[48,10]]},"71":{"position":[[1638,12]]},"72":{"position":[[1,10],[125,11]]},"73":{"position":[[197,10],[957,10],[1122,10]]},"74":{"position":[[10,10]]},"77":{"position":[[91,12]]},"78":{"position":[[297,11]]},"79":{"position":[[183,12]]},"82":{"position":[[151,11],[362,11]]},"84":{"position":[[62,10],[166,11],[178,11],[452,11]]},"86":{"position":[[63,12]]},"87":{"position":[[22,11]]},"89":{"position":[[269,12],[317,11]]},"92":{"position":[[1012,11],[1085,10],[1257,10]]},"93":{"position":[[788,10]]},"94":{"position":[[131,11],[334,12]]},"95":{"position":[[13,11]]}},"keywords":{}}],["permission.hasreason(denialreason.noadmin",{"_index":865,"title":{},"content":{"70":{"position":[[149,42]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.noadmin",{"_index":528,"title":{},"content":{"43":{"position":[[1668,54]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.twofa",{"_index":530,"title":{},"content":{"43":{"position":[[1800,52]]}},"keywords":{}}],["permission.isallow",{"_index":526,"title":{},"content":{"43":{"position":[[1572,22]]},"84":{"position":[[509,22]]}},"keywords":{}}],["permission.reason",{"_index":1007,"title":{},"content":{"84":{"position":[[637,18],[780,18]]}},"keywords":{}}],["permission={permissionsstore.administration.administrationact",{"_index":880,"title":{},"content":{"71":{"position":[[1140,66]]},"82":{"position":[[896,66]]}},"keywords":{}}],["permissiondenialreason",{"_index":603,"title":{},"content":{"52":{"position":[[193,22]]},"56":{"position":[[1813,23]]},"57":{"position":[[296,22]]},"69":{"position":[[279,22]]},"82":{"position":[[634,23]]},"84":{"position":[[105,22]]}},"keywords":{}}],["permissiondenialreason.exceedreadingcount",{"_index":1118,"title":{},"content":{"94":{"position":[[1080,42]]}},"keywords":{}}],["permissiondenialreason.missingdata",{"_index":833,"title":{},"content":{"65":{"position":[[209,35],[257,34]]}},"keywords":{}}],["permissiondenialreason.missinguserag",{"_index":1011,"title":{},"content":{"84":{"position":[[803,38]]}},"keywords":{}}],["permissiondenialreason.noadmin",{"_index":989,"title":{},"content":{"82":{"position":[[979,33]]}},"keywords":{}}],["permissiondenialreason.nopayaccount",{"_index":1008,"title":{},"content":{"84":{"position":[[660,36]]},"92":{"position":[[4084,36],[4349,36]]},"94":{"position":[[845,36]]},"95":{"position":[[1268,36]]}},"keywords":{}}],["permissionguard",{"_index":985,"title":{},"content":{"82":{"position":[[710,15],[733,24]]},"84":{"position":[[431,15]]}},"keywords":{}}],["permissionrouteguard",{"_index":973,"title":{},"content":{"81":{"position":[[221,21],[244,20]]},"83":{"position":[[3,20]]}},"keywords":{}}],["permissions.books.addingtoshelf",{"_index":1108,"title":{},"content":{"94":{"position":[[43,32]]}},"keywords":{}}],["permissionsdenialreason",{"_index":735,"title":{},"content":{"57":{"position":[[957,23]]}},"keywords":{}}],["permissionsgateway",{"_index":886,"title":{},"content":{"71":{"position":[[1379,18]]}},"keywords":{}}],["permissionspolici",{"_index":660,"title":{},"content":{"56":{"position":[[748,18]]},"61":{"position":[[377,18]]},"64":{"position":[[644,18]]},"89":{"position":[[1359,18],[2211,18]]},"92":{"position":[[74,18]]}},"keywords":{}}],["permissionspolicymanagerstor",{"_index":802,"title":{},"content":{"64":{"position":[[691,30]]},"89":{"position":[[1406,30],[2258,30]]}},"keywords":{}}],["permissionsstatu",{"_index":774,"title":{},"content":{"63":{"position":[[189,17]]}},"keywords":{}}],["permissionsstatus.error",{"_index":786,"title":{},"content":{"63":{"position":[[555,26]]}},"keywords":{}}],["permissionsstor",{"_index":519,"title":{"53":{"position":[[38,17]]}},"content":{"43":{"position":[[1274,17]]},"49":{"position":[[106,17]]},"53":{"position":[[1,16],[852,16],[1703,16],[1726,17],[1872,17]]},"56":{"position":[[1837,17],[1855,17],[2044,17],[2945,17]]},"62":{"position":[[1,16],[363,16]]},"64":{"position":[[425,17],[1600,17]]},"71":{"position":[[993,16],[1651,17]]},"82":{"position":[[658,16]]},"86":{"position":[[102,17]]},"87":{"position":[[73,17]]},"94":{"position":[[347,17]]},"95":{"position":[[403,17]]}},"keywords":{}}],["permissionsstore.preparedata",{"_index":754,"title":{"62":{"position":[[0,28]]},"64":{"position":[[12,29]]}},"content":{"63":{"position":[[1,28],[268,31],[591,29]]}},"keywords":{}}],["permissionsstore.preparingdatastatu",{"_index":775,"title":{},"content":{"63":{"position":[[209,37]]}},"keywords":{}}],["permissionsstore.t",{"_index":585,"title":{},"content":{"49":{"position":[[286,19]]},"86":{"position":[[261,19]]}},"keywords":{}}],["permissionsstoremock",{"_index":1134,"title":{},"content":{"95":{"position":[[380,22],[675,20],[733,20],[1078,20],[1162,20]]}},"keywords":{}}],["permissionsstoreзапрашива",{"_index":796,"title":{},"content":{"64":{"position":[[274,29]]}},"keywords":{}}],["permissionstor",{"_index":588,"title":{},"content":{"49":{"position":[[400,16]]},"53":{"position":[[158,16]]}},"keywords":{}}],["permissionsвозможн",{"_index":638,"title":{},"content":{"53":{"position":[[2134,22]]}},"keywords":{}}],["placehold",{"_index":983,"title":{},"content":{"82":{"position":[[587,11],[1379,12]]},"84":{"position":[[10,11]]}},"keywords":{}}],["polici",{"_index":263,"title":{"23":{"position":[[0,9]]},"48":{"position":[[0,9]]},"54":{"position":[[31,9]]},"60":{"position":[[7,6]]},"62":{"position":[[56,7]]},"92":{"position":[[18,6]]}},"content":{"18":{"position":[[366,6]]},"43":{"position":[[237,7],[245,7]]},"49":{"position":[[37,9],[136,9],[361,8]]},"51":{"position":[[85,8],[151,8]]},"52":{"position":[[351,6],[446,7],[454,7]]},"53":{"position":[[684,13],[784,13],[2251,8]]},"54":{"position":[[1,8],[134,8],[239,8]]},"56":{"position":[[654,6],[740,7]]},"57":{"position":[[74,9]]},"60":{"position":[[8,6]]},"61":{"position":[[124,6],[283,6],[369,7],[699,6]]},"62":{"position":[[93,7],[1284,6],[1401,6],[1652,6]]},"64":{"position":[[636,7]]},"69":{"position":[[37,6],[437,6],[532,7],[540,7]]},"86":{"position":[[132,9]]},"89":{"position":[[1351,7],[2203,7]]},"92":{"position":[[8,7],[66,7],[1039,7]]}},"keywords":{}}],["policy.createpermiss",{"_index":859,"title":{},"content":{"69":{"position":[[61,24]]}},"keywords":{}}],["policymanag",{"_index":485,"title":{},"content":{"43":{"position":[[283,14]]},"52":{"position":[[492,14]]},"53":{"position":[[888,14],[1148,13]]},"56":{"position":[[780,14]]},"61":{"position":[[409,14],[718,13]]},"62":{"position":[[399,14],[659,13]]},"64":{"position":[[676,14]]},"69":{"position":[[578,14]]},"71":{"position":[[281,14]]},"89":{"position":[[1391,14],[2243,14]]},"92":{"position":[[106,14],[3067,13],[3533,14]]}},"keywords":{}}],["policymanager.createpolici",{"_index":608,"title":{},"content":{"52":{"position":[[627,26]]},"56":{"position":[[975,28]]},"61":{"position":[[604,28]]},"64":{"position":[[833,28]]},"89":{"position":[[1548,28],[2449,28]]},"92":{"position":[[301,28]]}},"keywords":{}}],["policymanager.preparedata",{"_index":759,"title":{},"content":{"62":{"position":[[1332,25]]}},"keywords":{}}],["policymanager.preparedataasync",{"_index":1080,"title":{},"content":{"92":{"position":[[3588,33]]}},"keywords":{}}],["policymanagerstor",{"_index":486,"title":{},"content":{"43":{"position":[[298,19]]},"52":{"position":[[331,19],[507,19]]},"53":{"position":[[472,18],[903,19]]},"56":{"position":[[634,19],[795,19]]},"61":{"position":[[263,19],[424,19]]},"62":{"position":[[196,18],[414,19],[1220,19],[1240,18]]},"69":{"position":[[417,19],[593,19]]},"71":{"position":[[296,19]]},"92":{"position":[[121,19],[2796,18]]}},"keywords":{}}],["pr",{"_index":92,"title":{},"content":{"8":{"position":[[125,2]]}},"keywords":{}}],["preparedata",{"_index":498,"title":{},"content":{"43":{"position":[[525,12]]},"52":{"position":[[886,12]]},"53":{"position":[[1530,11]]},"56":{"position":[[1019,12]]},"61":{"position":[[651,11],[732,12]]},"62":{"position":[[37,12],[1041,11],[1381,11]]},"64":{"position":[[189,12],[879,12]]},"69":{"position":[[782,12]]},"71":{"position":[[471,12]]},"89":{"position":[[1594,12],[2493,12]]},"92":{"position":[[345,12],[2782,12],[2846,11],[3865,12]]}},"keywords":{}}],["preparedataasync",{"_index":1067,"title":{},"content":{"92":{"position":[[2860,17]]}},"keywords":{}}],["preparedataи",{"_index":757,"title":{},"content":{"62":{"position":[[1308,12]]}},"keywords":{}}],["preparingdatastatu",{"_index":631,"title":{},"content":{"53":{"position":[[1602,21]]},"62":{"position":[[1113,21]]}},"keywords":{}}],["privat",{"_index":29,"title":{"3":{"position":[[37,7]]}},"content":{"43":{"position":[[220,7],[266,7],[318,7],[361,7],[1244,7],[1292,7],[1330,7],[1370,7]]},"52":{"position":[[429,7],[475,7],[527,7]]},"53":{"position":[[871,7]]},"56":{"position":[[723,7],[815,7],[864,7],[1981,7],[2014,7],[2062,7]]},"61":{"position":[[352,7],[444,7],[493,7]]},"62":{"position":[[382,7]]},"64":{"position":[[619,7],[722,7],[1537,7],[1570,7],[1618,7],[1658,7],[1758,7]]},"69":{"position":[[515,7],[561,7],[613,7]]},"71":{"position":[[264,7],[316,7]]},"89":{"position":[[1334,7],[1437,7],[2186,7],[2289,7],[2338,7]]},"92":{"position":[[49,7],[141,7],[190,7]]},"94":{"position":[[317,7],[365,7]]}},"keywords":{}}],["process.env",{"_index":114,"title":{},"content":{"11":{"position":[[188,11]]}},"keywords":{}}],["prod",{"_index":208,"title":{"16":{"position":[[0,4]]}},"content":{},"keywords":{}}],["product",{"_index":222,"title":{},"content":{"17":{"position":[[346,10]]}},"keywords":{}}],["promise<void>",{"_index":500,"title":{},"content":{"43":{"position":[[548,19]]},"52":{"position":[[909,19]]},"69":{"position":[[805,19]]},"71":{"position":[[494,19]]}},"keywords":{}}],["promise.al",{"_index":661,"title":{},"content":{"56":{"position":[[1055,13]]},"61":{"position":[[768,13]]},"89":{"position":[[2529,13]]},"92":{"position":[[381,13]]}},"keywords":{}}],["promise.all([this.userrepo.getrolesquery().async",{"_index":502,"title":{},"content":{"43":{"position":[[582,53]]},"52":{"position":[[943,53]]},"69":{"position":[[839,53]]},"71":{"position":[[528,53]]}},"keywords":{}}],["promise.all([userrepo.getpersoninfoquery().async",{"_index":804,"title":{},"content":{"64":{"position":[[915,53]]},"89":{"position":[[1630,53]]}},"keywords":{}}],["prop",{"_index":694,"title":{},"content":{"56":{"position":[[3025,5],[3092,6]]},"82":{"position":[[763,5],[852,6]]},"84":{"position":[[156,5],[491,6]]}},"keywords":{}}],["public",{"_index":28,"title":{"3":{"position":[[28,6]]}},"content":{"15":{"position":[[386,6]]},"43":{"position":[[688,6],[1459,6]]},"53":{"position":[[923,6],[982,6],[1523,6],[1591,6],[1944,6]]},"56":{"position":[[1214,6],[1935,6],[2158,6],[2733,6],[2801,6]]},"61":{"position":[[971,6]]},"62":{"position":[[434,6],[493,6],[1034,6],[1102,6]]},"64":{"position":[[1014,6],[1491,6],[1843,6],[2265,6],[2333,6]]},"69":{"position":[[945,6]]},"71":{"position":[[634,6],[1723,6]]},"73":{"position":[[270,6],[485,6],[703,6],[1254,6]]},"74":{"position":[[297,6],[340,6],[375,6],[408,6],[465,6],[501,6]]},"75":{"position":[[77,6],[146,6]]},"89":{"position":[[1729,6],[2731,6]]},"92":{"position":[[540,6],[1406,6],[4468,6]]},"94":{"position":[[267,6],[437,6],[1434,6],[1510,6]]}},"keywords":{}}],["public_api_url",{"_index":288,"title":{},"content":{"19":{"position":[[121,15]]}},"keywords":{}}],["public_release_tag",{"_index":292,"title":{},"content":{"19":{"position":[[199,19]]}},"keywords":{}}],["public_sentry_dsn",{"_index":290,"title":{},"content":{"19":{"position":[[145,18]]}},"keywords":{}}],["public_sentry_env",{"_index":291,"title":{},"content":{"19":{"position":[[172,18]]}},"keywords":{}}],["public_ws_url",{"_index":256,"title":{},"content":{"18":{"position":[[260,17],[392,17],[627,13]]}},"keywords":{}}],["public_созда",{"_index":200,"title":{},"content":{"15":{"position":[[203,14]]},"17":{"position":[[864,14]]}},"keywords":{}}],["quot;${public_ws_url}"",{"_index":279,"title":{},"content":{"18":{"position":[[742,28]]}},"keywords":{}}],["quot;/usr/share/nginx/html/scripts/startup.prod.sh"",{"_index":237,"title":{},"content":{"17":{"position":[[639,58]]}},"keywords":{}}],["quot;sh"",{"_index":236,"title":{},"content":{"17":{"position":[[622,16]]}},"keywords":{}}],["quot;базовый"",{"_index":852,"title":{},"content":{"68":{"position":[[727,19]]}},"keywords":{}}],["quot;добав",{"_index":566,"title":{},"content":{"47":{"position":[[20,14]]},"56":{"position":[[225,14]]}},"keywords":{}}],["quot;достигнут",{"_index":656,"title":{},"content":{"56":{"position":[[402,16]]}},"keywords":{}}],["quot;доступ",{"_index":911,"title":{},"content":{"74":{"position":[[48,12]]}},"keywords":{}}],["quot;ознакомл",{"_index":855,"title":{},"content":{"68":{"position":[[903,16]]}},"keywords":{}}],["quot;отправить"",{"_index":853,"title":{},"content":{"68":{"position":[[853,21]]}},"keywords":{}}],["quot;размазыванию"",{"_index":398,"title":{},"content":{"33":{"position":[[499,24]]}},"keywords":{}}],["quot;редактирова",{"_index":847,"title":{},"content":{"68":{"position":[[224,19]]}},"keywords":{}}],["quot;созда",{"_index":383,"title":{},"content":{"33":{"position":[[85,13]]},"34":{"position":[[83,13]]},"68":{"position":[[8,13],[509,13],[670,13]]},"71":{"position":[[20,13]]},"73":{"position":[[8,13]]}},"keywords":{}}],["quot;удал",{"_index":569,"title":{},"content":{"47":{"position":[[107,13]]}},"keywords":{}}],["rbac",{"_index":343,"title":{"32":{"position":[[44,5]]},"33":{"position":[[9,4]]}},"content":{"32":{"position":[[104,4],[291,4]]}},"keywords":{}}],["react",{"_index":876,"title":{},"content":{"71":{"position":[[971,5]]},"82":{"position":[[513,8],[553,5]]}},"keywords":{}}],["reactnod",{"_index":981,"title":{},"content":{"82":{"position":[[496,9],[783,10]]},"84":{"position":[[328,10]]}},"keywords":{}}],["reactnode>",{"_index":1004,"title":{},"content":{"84":{"position":[[303,14]]}},"keywords":{}}],["read",{"_index":336,"title":{},"content":{"30":{"position":[[16,7]]}},"keywords":{}}],["reading.tsx",{"_index":945,"title":{},"content":{"79":{"position":[[152,11]]}},"keywords":{}}],["readingbook",{"_index":595,"title":{},"content":{"51":{"position":[[342,11]]},"74":{"position":[[386,13]]}},"keywords":{}}],["readingbookpag",{"_index":959,"title":{},"content":{"79":{"position":[[913,15],[1192,16]]}},"keywords":{}}],["readingbookrouteguard",{"_index":932,"title":{},"content":{"77":{"position":[[187,22]]},"79":{"position":[[279,22],[846,21]]}},"keywords":{}}],["readingbookscreen",{"_index":956,"title":{},"content":{"79":{"position":[[741,17]]}},"keywords":{}}],["readingbookдоступ",{"_index":919,"title":{},"content":{"74":{"position":[[211,17]]}},"keywords":{}}],["readonli",{"_index":483,"title":{},"content":{"43":{"position":[[228,8],[274,8],[326,8],[369,8],[1252,8],[1300,8],[1338,8],[1378,8]]},"52":{"position":[[437,8],[483,8],[535,8]]},"53":{"position":[[879,8],[930,8],[989,8],[1850,8]]},"56":{"position":[[731,8],[823,8],[872,8],[1989,8],[2022,8],[2070,8]]},"61":{"position":[[360,8],[452,8],[501,8]]},"62":{"position":[[390,8],[441,8],[500,8]]},"64":{"position":[[627,8],[730,8],[1545,8],[1578,8],[1626,8],[1666,8]]},"69":{"position":[[523,8],[569,8],[621,8]]},"71":{"position":[[272,8],[324,8],[1629,8]]},"89":{"position":[[1342,8],[1445,8],[2194,8],[2297,8],[2346,8]]},"92":{"position":[[57,8],[149,8],[198,8]]},"94":{"position":[[325,8],[373,8]]}},"keywords":{}}],["reason",{"_index":322,"title":{"24":{"position":[[0,8]]},"55":{"position":[[0,8]]},"57":{"position":[[4,7]]}},"content":{"57":{"position":[[89,7],[215,7],[811,8],[863,7]]},"58":{"position":[[13,6],[106,7]]},"65":{"position":[[137,7],[201,7],[250,6]]},"70":{"position":[[117,8],[206,8]]},"92":{"position":[[3968,7],[4063,6]]}},"keywords":{}}],["reasonзначен",{"_index":744,"title":{},"content":{"58":{"position":[[91,14]]}},"keywords":{}}],["reasonпоследн",{"_index":1099,"title":{},"content":{"93":{"position":[[158,15]]}},"keywords":{}}],["record<str",{"_index":1003,"title":{},"content":{"84":{"position":[[285,17]]}},"keywords":{}}],["render",{"_index":74,"title":{},"content":{"6":{"position":[[121,10]]}},"keywords":{}}],["renderrout",{"_index":772,"title":{},"content":{"63":{"position":[[149,12]]}},"keywords":{}}],["replac",{"_index":113,"title":{},"content":{"11":{"position":[[180,7]]}},"keywords":{}}],["return",{"_index":504,"title":{},"content":{"43":{"position":[[725,6],[994,6],[1090,6],[1655,7],[1787,7],[1967,7]]},"53":{"position":[[1626,6],[1981,6]]},"56":{"position":[[1243,6],[1352,6],[1462,6],[1601,6],[2311,7],[2432,7],[2622,7],[3205,6]]},"61":{"position":[[1000,6],[1109,6],[1219,6],[1358,6]]},"62":{"position":[[1137,6]]},"63":{"position":[[360,6]]},"64":{"position":[[1258,6],[1788,6],[2040,7],[2165,7]]},"69":{"position":[[982,6],[1111,6]]},"71":{"position":[[671,6],[787,6],[1092,6],[1760,6],[1998,6]]},"73":{"position":[[307,6],[423,6],[525,6],[641,6],[738,6],[854,6],[1291,6],[1407,6]]},"79":{"position":[[554,6],[987,6],[1057,6]]},"82":{"position":[[867,6],[1628,6]]},"84":{"position":[[534,6],[592,6],[699,6],[844,6],[934,6]]},"89":{"position":[[800,6],[872,6],[1004,6],[1973,6],[2791,6],[2991,6],[3119,6]]},"92":{"position":[[569,6],[678,6],[788,6],[927,6],[1435,6],[1582,6],[1742,6],[1944,6],[3622,6],[4497,6],[4606,6],[4716,6],[4855,6]]},"93":{"position":[[368,6],[440,6],[584,6]]},"94":{"position":[[686,7],[915,7],[1210,7]]},"95":{"position":[[551,6]]}},"keywords":{}}],["role",{"_index":353,"title":{},"content":{"32":{"position":[[109,5]]},"90":{"position":[[107,6],[298,6]]}},"keywords":{}}],["rout",{"_index":331,"title":{"29":{"position":[[0,5]]},"30":{"position":[[14,5]]},"76":{"position":[[0,5]]},"81":{"position":[[9,5]]}},"content":{"77":{"position":[[5,5]]},"78":{"position":[[1,5],[103,5]]},"80":{"position":[[15,5],[125,5]]},"81":{"position":[[63,5],[176,5],[307,5]]}},"keywords":{}}],["routeguards)взаимодейств",{"_index":462,"title":{},"content":{"38":{"position":[[294,27]]}},"keywords":{}}],["router",{"_index":522,"title":{},"content":{"43":{"position":[[1387,7],[1395,7]]}},"keywords":{}}],["routesguard",{"_index":930,"title":{},"content":{"77":{"position":[[132,13]]},"79":{"position":[[224,13]]}},"keywords":{}}],["rule",{"_index":324,"title":{"25":{"position":[[0,6]]},"26":{"position":[[14,6]]},"85":{"position":[[0,6]]},"87":{"position":[[0,5]]},"88":{"position":[[11,6]]},"93":{"position":[[13,6]]}},"content":{"54":{"position":[[305,6]]},"64":{"position":[[570,14]]},"86":{"position":[[36,6],[154,6]]},"87":{"position":[[1,5]]},"88":{"position":[[1,5]]},"89":{"position":[[423,5],[1285,14],[2139,14]]},"90":{"position":[[5,5]]},"93":{"position":[[18,5]]}},"keywords":{}}],["run",{"_index":220,"title":{},"content":{"17":{"position":[[334,3],[357,3],[365,3]]}},"keywords":{}}],["runtim",{"_index":417,"title":{},"content":{"34":{"position":[[329,7]]}},"keywords":{}}],["secur",{"_index":262,"title":{},"content":{"18":{"position":[[357,8]]}},"keywords":{}}],["self",{"_index":266,"title":{},"content":{"18":{"position":[[385,6]]}},"keywords":{}}],["server",{"_index":170,"title":{},"content":{"13":{"position":[[586,6]]},"15":{"position":[[92,6]]},"18":{"position":[[298,6]]}},"keywords":{}}],["setup",{"_index":1062,"title":{},"content":{"92":{"position":[[2298,7],[2925,5],[3759,7],[4203,7],[5188,7]]},"95":{"position":[[372,5]]}},"keywords":{}}],["setup(permissionsstoremock",{"_index":1140,"title":{},"content":{"95":{"position":[[872,28],[1331,28]]}},"keywords":{}}],["share",{"_index":607,"title":{},"content":{"52":{"position":[[315,6]]},"53":{"position":[[451,6]]},"56":{"position":[[618,6]]},"61":{"position":[[247,6]]},"62":{"position":[[175,6]]},"69":{"position":[[401,6]]},"89":{"position":[[598,6]]}},"keywords":{}}],["shelf",{"_index":1090,"title":{},"content":{"92":{"position":[[5289,6]]}},"keywords":{}}],["shell",{"_index":232,"title":{},"content":{"17":{"position":[[570,5]]}},"keywords":{}}],["showcreationdocbutton",{"_index":901,"title":{},"content":{"73":{"position":[[208,22],[281,23]]}},"keywords":{}}],["showeditingdocmod",{"_index":903,"title":{},"content":{"73":{"position":[[714,21]]}},"keywords":{}}],["side",{"_index":73,"title":{},"content":{"6":{"position":[[116,4]]}},"keywords":{}}],["sidebar",{"_index":869,"title":{},"content":{"71":{"position":[[48,7],[1062,7],[1907,7]]}},"keywords":{}}],["singleton",{"_index":614,"title":{},"content":{"53":{"position":[[24,9],[1680,9]]}},"keywords":{}}],["src",{"_index":265,"title":{},"content":{"18":{"position":[[381,3]]}},"keywords":{}}],["ssg",{"_index":16,"title":{"2":{"position":[[14,3]]}},"content":{"2":{"position":[[14,3],[152,3]]}},"keywords":{}}],["ssr",{"_index":15,"title":{"2":{"position":[[8,3]]}},"content":{"2":{"position":[[8,3],[146,3]]}},"keywords":{}}],["startup.prod.sh",{"_index":238,"title":{},"content":{"17":{"position":[[707,16],[732,15],[756,15]]},"18":{"position":[[431,15],[848,15]]}},"keywords":{}}],["store",{"_index":581,"title":{},"content":{"49":{"position":[[88,7]]},"86":{"position":[[84,7]]}},"keywords":{}}],["string",{"_index":289,"title":{},"content":{"19":{"position":[[137,7],[164,7],[191,7],[219,7]]},"56":{"position":[[2006,7],[2911,7],[3039,7]]},"58":{"position":[[126,6]]},"64":{"position":[[1562,7]]},"70":{"position":[[126,7],[215,7]]},"75":{"position":[[111,7],[181,7]]},"89":{"position":[[729,7]]},"90":{"position":[[114,7],[217,8],[241,7],[305,7],[369,8],[393,7]]},"93":{"position":[[297,7]]},"94":{"position":[[466,7]]}},"keywords":{}}],["sut",{"_index":1061,"title":{},"content":{"92":{"position":[[2284,3],[3505,3],[3631,3],[3745,3],[4189,3],[5174,3]]},"95":{"position":[[476,3],[572,3],[1323,3]]}},"keywords":{}}],["sut.addtoshelf('id",{"_index":1138,"title":{},"content":{"95":{"position":[[529,21]]}},"keywords":{}}],["systemdenialreason",{"_index":723,"title":{},"content":{"57":{"position":[[585,18],[842,18],[896,18]]}},"keywords":{}}],["systemdenialreason.internalerror",{"_index":736,"title":{},"content":{"57":{"position":[[1048,33]]}},"keywords":{}}],["systemdenialreason.missingdata",{"_index":737,"title":{},"content":{"57":{"position":[[1153,31]]}},"keywords":{}}],["theme={theme}>",{"_index":779,"title":{},"content":{"63":{"position":[[387,17]]}},"keywords":{}}],["this.administr",{"_index":626,"title":{},"content":{"53":{"position":[[1293,19]]},"62":{"position":[[804,19]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().async",{"_index":663,"title":{},"content":{"56":{"position":[[1108,47]]},"61":{"position":[[865,47]]},"89":{"position":[[2626,47]]},"92":{"position":[[434,47]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().data",{"_index":1038,"title":{},"content":{"89":{"position":[[3048,44]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery()?.data",{"_index":666,"title":{},"content":{"56":{"position":[[1390,45]]},"61":{"position":[[1147,45]]},"92":{"position":[[716,45],[1620,45],[4644,45]]}},"keywords":{}}],["this.book",{"_index":627,"title":{},"content":{"53":{"position":[[1381,10]]},"62":{"position":[[892,10]]}},"keywords":{}}],["this.bookid",{"_index":681,"title":{},"content":{"56":{"position":[[2274,14]]}},"keywords":{}}],["this.booksrepo.getbookbyidquery(this.bookid",{"_index":818,"title":{},"content":{"64":{"position":[[1795,45]]}},"keywords":{}}],["this.isopenaccountpay",{"_index":1121,"title":{},"content":{"94":{"position":[[1473,25],[1550,25]]}},"keywords":{}}],["this.isopenpayaccount",{"_index":689,"title":{},"content":{"56":{"position":[[2768,21],[2837,21]]},"64":{"position":[[2300,21],[2369,21]]}},"keywords":{}}],["this.notifyservice.error",{"_index":529,"title":{},"content":{"43":{"position":[[1725,25],[1918,25],[1977,25]]},"56":{"position":[[2541,25],[2632,25]]},"64":{"position":[[2175,25]]},"94":{"position":[[1129,25],[1333,25]]}},"keywords":{}}],["this.notifyservice.error('вы",{"_index":825,"title":{},"content":{"64":{"position":[[2118,28]]}},"keywords":{}}],["this.notifyservice.info(`книг",{"_index":680,"title":{},"content":{"56":{"position":[[2243,30]]},"94":{"position":[[623,30]]}},"keywords":{}}],["this.notifyservice.success(`книг",{"_index":823,"title":{},"content":{"64":{"position":[[1984,33]]}},"keywords":{}}],["this.openpaymentaccount",{"_index":683,"title":{},"content":{"56":{"position":[[2405,26]]},"94":{"position":[[888,26]]}},"keywords":{}}],["this.permissions.administration.administrationact",{"_index":525,"title":{},"content":{"43":{"position":[[1514,54]]}},"keywords":{}}],["this.permissions.administration.administrationactions.isallow",{"_index":636,"title":{},"content":{"53":{"position":[[1988,64]]},"71":{"position":[[1767,64]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason",{"_index":1116,"title":{},"content":{"94":{"position":[[797,47],[1032,47]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.exceedreadingcount",{"_index":684,"title":{},"content":{"56":{"position":[[2447,89]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.nopay",{"_index":682,"title":{},"content":{"56":{"position":[[2324,78]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.isallow",{"_index":679,"title":{},"content":{"56":{"position":[[2192,48]]},"94":{"position":[[572,48]]}},"keywords":{}}],["this.permissions.calcpayment(this.bookbyidquery.acceptableag",{"_index":821,"title":{},"content":{"64":{"position":[[1889,63]]}},"keywords":{}}],["this.polici",{"_index":494,"title":{},"content":{"43":{"position":[[453,11]]},"52":{"position":[[724,11]]},"56":{"position":[[961,11]]},"61":{"position":[[590,11]]},"64":{"position":[[819,11]]},"69":{"position":[[710,11]]},"89":{"position":[[1534,11],[2435,11]]},"92":{"position":[[287,11]]}},"keywords":{}}],["this.policy.createpermission((allow",{"_index":505,"title":{},"content":{"43":{"position":[[732,36]]},"56":{"position":[[1250,36]]},"61":{"position":[[1007,36]]},"64":{"position":[[1065,36]]},"69":{"position":[[989,36]]},"89":{"position":[[1780,36],[2798,36]]},"92":{"position":[[576,36],[1442,36],[4504,36]]}},"keywords":{}}],["this.policymanag",{"_index":625,"title":{},"content":{"53":{"position":[[1244,18],[1348,19],[1418,19]]},"62":{"position":[[755,18],[859,19],[929,19]]}},"keywords":{}}],["this.policymanager.createpermission((allow",{"_index":871,"title":{},"content":{"71":{"position":[[678,43]]},"73":{"position":[[314,43],[532,43],[745,43],[1298,43]]}},"keywords":{}}],["this.policymanager.createpolici",{"_index":495,"title":{},"content":{"43":{"position":[[467,33]]},"52":{"position":[[738,33]]},"69":{"position":[[724,33]]},"71":{"position":[[413,33]]}},"keywords":{}}],["this.policymanager.preparedatasync",{"_index":630,"title":{},"content":{"53":{"position":[[1553,37]]},"62":{"position":[[1064,37]]}},"keywords":{}}],["this.policymanager.preparingdatastatu",{"_index":632,"title":{},"content":{"53":{"position":[[1633,39]]},"62":{"position":[[1144,39]]}},"keywords":{}}],["this.router.push(app_routes.createdoc.getredirectpath",{"_index":527,"title":{},"content":{"43":{"position":[[1597,57]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().async",{"_index":753,"title":{},"content":{"61":{"position":[[821,43]]},"89":{"position":[[2582,43]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().data?.birthday",{"_index":810,"title":{},"content":{"64":{"position":[[1172,50]]},"89":{"position":[[1887,50],[2905,50]]}},"keywords":{}}],["this.userrepo.getrolesquery().async",{"_index":662,"title":{},"content":{"56":{"position":[[1069,38]]},"61":{"position":[[782,38]]},"89":{"position":[[2543,38]]},"92":{"position":[[395,38]]}},"keywords":{}}],["this.userrepo.getrolesquery().data?.isadmin",{"_index":515,"title":{},"content":{"43":{"position":[[1042,45]]},"56":{"position":[[1304,45]]},"61":{"position":[[1061,45]]},"69":{"position":[[1043,45]]},"71":{"position":[[739,45]]},"73":{"position":[[375,45],[593,45],[806,45],[1359,45]]},"92":{"position":[[630,45],[1534,45],[4558,45]]}},"keywords":{}}],["time",{"_index":102,"title":{"11":{"position":[[31,5]]}},"content":{"11":{"position":[[23,4]]}},"keywords":{}}],["titl",{"_index":992,"title":{},"content":{"82":{"position":[[1040,6]]}},"keywords":{}}],["title="доступн",{"_index":995,"title":{},"content":{"82":{"position":[[1113,20]]}},"keywords":{}}],["title="книг",{"_index":961,"title":{},"content":{"79":{"position":[[1013,17]]}},"keywords":{}}],["title="необходим",{"_index":1009,"title":{},"content":{"84":{"position":[[722,22],[867,22]]}},"keywords":{}}],["title="нет",{"_index":1016,"title":{},"content":{"84":{"position":[[957,15]]}},"keywords":{}}],["to={app_routes.createbook.getredirectpath()}>",{"_index":882,"title":{},"content":{"71":{"position":[[1230,48],[2094,48]]}},"keywords":{}}],["toggl",{"_index":471,"title":{"40":{"position":[[8,6]]},"41":{"position":[[39,7]]}},"content":{"41":{"position":[[40,6],[81,6],[116,8],[153,6]]},"67":{"position":[[292,6]]},"68":{"position":[[597,7]]}},"keywords":{}}],["true",{"_index":493,"title":{},"content":{"43":{"position":[[444,4],[1448,4]]},"52":{"position":[[615,4]]},"53":{"position":[[1136,4],[1933,4]]},"56":{"position":[[952,4],[2147,4],[2792,5]]},"61":{"position":[[581,4]]},"62":{"position":[[647,4]]},"64":{"position":[[810,4],[1747,4],[2324,5]]},"69":{"position":[[701,4]]},"71":{"position":[[404,4],[1712,4]]},"89":{"position":[[1525,4],[2426,4]]},"92":{"position":[[278,4],[2315,4],[3776,4],[5233,5]]},"94":{"position":[[1501,5]]}},"keywords":{}}],["two",{"_index":474,"title":{"42":{"position":[[4,4]]}},"content":{},"keywords":{}}],["twofa",{"_index":489,"title":{},"content":{"43":{"position":[[378,6],[791,5],[1309,6]]}},"keywords":{}}],["twofa.ispass",{"_index":513,"title":{},"content":{"43":{"position":[[974,17]]}},"keywords":{}}],["twofaservic",{"_index":490,"title":{},"content":{"43":{"position":[[385,13],[1316,13]]}},"keywords":{}}],["type",{"_index":601,"title":{},"content":{"52":{"position":[[138,4]]},"53":{"position":[[313,4],[465,4],[705,4]]},"56":{"position":[[3020,4]]},"62":{"position":[[189,4]]},"65":{"position":[[146,4]]},"69":{"position":[[224,4]]},"70":{"position":[[43,4]]},"82":{"position":[[489,4],[758,4]]},"84":{"position":[[55,4],[151,4]]}},"keywords":{}}],["ui",{"_index":366,"title":{"72":{"position":[[33,3]]}},"content":{"32":{"position":[[364,3],[570,3]]},"71":{"position":[[1435,2]]},"72":{"position":[[55,3],[95,2]]},"73":{"position":[[970,2]]}},"keywords":{}}],["uistor",{"_index":327,"title":{"27":{"position":[[28,8]]},"94":{"position":[[13,8]]}},"content":{"43":{"position":[[1221,7]]},"53":{"position":[[1820,7]]},"56":{"position":[[1925,7]]},"64":{"position":[[1481,7]]},"71":{"position":[[1524,8],[1599,7]]},"94":{"position":[[24,7],[161,7],[257,7]]}},"keywords":{}}],["uistore(bookid",{"_index":692,"title":{},"content":{"56":{"position":[[2929,15]]}},"keywords":{}}],["uistore(permissionsstoremock",{"_index":1137,"title":{},"content":{"95":{"position":[[486,29]]}},"keywords":{}}],["useeffect",{"_index":776,"title":{},"content":{"63":{"position":[[247,12]]}},"keywords":{}}],["userbirthday",{"_index":1027,"title":{},"content":{"89":{"position":[[714,14],[854,15]]},"90":{"position":[[226,14],[378,14]]},"93":{"position":[[282,14],[422,15]]}},"keywords":{}}],["userouterparam",{"_index":957,"title":{},"content":{"79":{"position":[[795,15],[957,18]]}},"keywords":{}}],["useroutes(rout",{"_index":773,"title":{},"content":{"63":{"position":[[164,18]]}},"keywords":{}}],["userrepo",{"_index":487,"title":{},"content":{"43":{"position":[[335,9]]},"52":{"position":[[544,9]]},"53":{"position":[[1067,9],[1368,9],[1451,9]]},"56":{"position":[[881,9]]},"61":{"position":[[510,9]]},"62":{"position":[[578,9],[879,9],[962,9]]},"64":{"position":[[739,9]]},"69":{"position":[[630,9]]},"71":{"position":[[333,9]]},"89":{"position":[[1454,9],[2355,9]]},"92":{"position":[[207,9]]}},"keywords":{}}],["userrepomock",{"_index":1071,"title":{},"content":{"92":{"position":[[3160,12],[3565,13]]}},"keywords":{}}],["userrepositori",{"_index":488,"title":{},"content":{"43":{"position":[[345,15]]},"52":{"position":[[145,14],[554,15]]},"53":{"position":[[267,14],[339,14],[1077,15],[1763,15]]},"56":{"position":[[891,15]]},"61":{"position":[[74,14],[520,15]]},"62":{"position":[[588,15]]},"64":{"position":[[749,15]]},"69":{"position":[[231,14],[640,15]]},"71":{"position":[[343,15]]},"89":{"position":[[1464,15],[2365,15]]},"92":{"position":[[217,15]]}},"keywords":{}}],["usest",{"_index":698,"title":{},"content":{"56":{"position":[[3167,11]]}},"keywords":{}}],["usestate(createuistor",{"_index":892,"title":{},"content":{"71":{"position":[[1973,24]]}},"keywords":{}}],["usr/share/nginx/html",{"_index":229,"title":{},"content":{"17":{"position":[[508,21]]}},"keywords":{}}],["usr/src/app",{"_index":215,"title":{},"content":{"17":{"position":[[272,12]]}},"keywords":{}}],["usr/src/app/dist",{"_index":228,"title":{},"content":{"17":{"position":[[490,17]]}},"keywords":{}}],["ux",{"_index":456,"title":{},"content":{"38":{"position":[[117,2]]}},"keywords":{}}],["valid",{"_index":921,"title":{},"content":{"74":{"position":[[290,5]]},"75":{"position":[[70,5]]},"90":{"position":[[34,5]]}},"keywords":{}}],["vite",{"_index":45,"title":{},"content":{"4":{"position":[[229,4]]},"5":{"position":[[151,5]]},"10":{"position":[[21,4]]},"11":{"position":[[160,7]]},"15":{"position":[[311,4]]}},"keywords":{}}],["vite_",{"_index":51,"title":{},"content":{"4":{"position":[[299,6]]}},"keywords":{}}],["vitest",{"_index":1129,"title":{},"content":{"95":{"position":[[72,6],[168,7]]}},"keywords":{}}],["webpack",{"_index":54,"title":{},"content":{"5":{"position":[[34,8]]},"15":{"position":[[376,7]]}},"keywords":{}}],["webpack)перемен",{"_index":119,"title":{},"content":{"11":{"position":[[252,19]]}},"keywords":{}}],["white",{"_index":125,"title":{},"content":{"11":{"position":[[423,5]]}},"keywords":{}}],["window",{"_index":287,"title":{},"content":{"19":{"position":[[101,6]]}},"keywords":{}}],["window.__env__",{"_index":167,"title":{},"content":{"13":{"position":[[465,18]]},"15":{"position":[[425,17]]},"17":{"position":[[955,17]]},"19":{"position":[[60,14],[290,14]]}},"keywords":{}}],["window.__env__.public_api_url",{"_index":296,"title":{},"content":{"19":{"position":[[366,30]]}},"keywords":{}}],["window.__env__.public_release_tag",{"_index":302,"title":{},"content":{"19":{"position":[[516,34]]}},"keywords":{}}],["window.__env__.public_sentry_dsn",{"_index":298,"title":{},"content":{"19":{"position":[[412,33]]}},"keywords":{}}],["window.__env__.public_sentry_env",{"_index":300,"title":{},"content":{"19":{"position":[[463,33]]}},"keywords":{}}],["window.__env__={"public_api_url":"https://astral.ru"",{"_index":207,"title":{},"content":{"15":{"position":[[448,74]]},"17":{"position":[[978,74]]}},"keywords":{}}],["workdir",{"_index":214,"title":{},"content":{"17":{"position":[[264,7]]}},"keywords":{}}],["xaml",{"_index":340,"title":{"31":{"position":[[19,4]]}},"content":{},"keywords":{}}],["а",{"_index":182,"title":{},"content":{"13":{"position":[[956,1]]},"68":{"position":[[587,1]]}},"keywords":{}}],["абстрактн",{"_index":874,"title":{},"content":{"71":{"position":[[910,11]]},"73":{"position":[[1110,11]]},"81":{"position":[[208,12]]}},"keywords":{}}],["админ",{"_index":738,"title":{},"content":{"57":{"position":[[1216,7]]}},"keywords":{}}],["администратор",{"_index":478,"title":{},"content":{"43":{"position":[[48,14],[670,14],[1768,15]]},"57":{"position":[[339,15]]},"68":{"position":[[53,14]]},"69":{"position":[[927,14]]},"71":{"position":[[103,16],[616,14]]},"73":{"position":[[84,15],[1199,15]]},"74":{"position":[[135,14]]},"82":{"position":[[84,15],[1055,15]]},"92":{"position":[[1516,14],[2242,16],[3703,16]]}},"keywords":{}}],["администраторов"",{"_index":996,"title":{},"content":{"82":{"position":[[1145,21]]}},"keywords":{}}],["админск",{"_index":1041,"title":{},"content":{"90":{"position":[[57,9]]}},"keywords":{}}],["аккаунт",{"_index":387,"title":{},"content":{"33":{"position":[[150,9]]},"34":{"position":[[148,9],[264,7]]},"43":{"position":[[2058,9]]},"56":{"position":[[72,7],[191,8]]},"57":{"position":[[389,7]]},"67":{"position":[[136,8]]},"68":{"position":[[303,9],[469,7]]},"92":{"position":[[1697,7],[2029,7],[2399,7],[2623,7],[4004,7],[4143,7],[5078,7]]}},"keywords":{}}],["аккаунт"",{"_index":1010,"title":{},"content":{"84":{"position":[[754,13]]}},"keywords":{}}],["аккумулирова",{"_index":1087,"title":{},"content":{"92":{"position":[[5007,14]]}},"keywords":{}}],["актив",{"_index":857,"title":{},"content":{"68":{"position":[[944,7]]}},"keywords":{}}],["активн",{"_index":479,"title":{},"content":{"43":{"position":[[65,8]]}},"keywords":{}}],["алгоритм",{"_index":1047,"title":{"92":{"position":[[0,8]]}},"content":{},"keywords":{}}],["архитектур",{"_index":2,"title":{"0":{"position":[[15,11]]}},"content":{"7":{"position":[[6,11]]}},"keywords":{}}],["архитектурн",{"_index":889,"title":{},"content":{"71":{"position":[[1457,13]]}},"keywords":{}}],["архитектурыкак",{"_index":69,"title":{},"content":{"6":{"position":[[58,14]]}},"keywords":{}}],["асинхрон",{"_index":307,"title":{},"content":{"20":{"position":[[94,12]]},"92":{"position":[[2828,11]]}},"keywords":{}}],["астра",{"_index":80,"title":{},"content":{"7":{"position":[[119,6]]}},"keywords":{}}],["аутентификац",{"_index":413,"title":{},"content":{"34":{"position":[[190,15]]}},"keywords":{}}],["базов",{"_index":565,"title":{},"content":{"46":{"position":[[766,7]]}},"keywords":{}}],["баланс",{"_index":763,"title":{},"content":{"62":{"position":[[1556,6]]}},"keywords":{}}],["безопасн",{"_index":26,"title":{"3":{"position":[[0,13]]}},"content":{},"keywords":{}}],["библиотек",{"_index":1128,"title":{},"content":{"95":{"position":[[61,10]]}},"keywords":{}}],["бизнес",{"_index":380,"title":{},"content":{"33":{"position":[[59,6]]},"34":{"position":[[57,6]]},"54":{"position":[[166,6]]},"67":{"position":[[472,6]]}},"keywords":{}}],["билд",{"_index":25,"title":{},"content":{"2":{"position":[[170,6]]},"4":{"position":[[170,4]]}},"keywords":{}}],["блокир",{"_index":768,"title":{},"content":{"62":{"position":[[1930,9]]},"64":{"position":[[125,9]]},"72":{"position":[[67,12]]}},"keywords":{}}],["блокировк",{"_index":542,"title":{},"content":{"45":{"position":[[97,10]]},"64":{"position":[[336,10]]},"67":{"position":[[336,10]]}},"keywords":{}}],["блокировок",{"_index":358,"title":{},"content":{"32":{"position":[[229,10]]}},"keywords":{}}],["большинств",{"_index":545,"title":{},"content":{"46":{"position":[[62,11]]}},"keywords":{}}],["браузер",{"_index":34,"title":{},"content":{"4":{"position":[[45,9]]},"11":{"position":[[283,8]]},"19":{"position":[[236,8]]},"20":{"position":[[39,8]]}},"keywords":{}}],["бренд",{"_index":128,"title":{},"content":{"11":{"position":[[451,6]]}},"keywords":{}}],["бэкенд",{"_index":342,"title":{"32":{"position":[[36,7]]},"33":{"position":[[17,8]]},"34":{"position":[[17,8]]}},"content":{"34":{"position":[[233,7]]}},"keywords":{}}],["вдохновл",{"_index":338,"title":{"31":{"position":[[0,11]]}},"content":{},"keywords":{}}],["взаимодейств",{"_index":616,"title":{},"content":{"53":{"position":[[133,15]]}},"keywords":{}}],["взрывн",{"_index":896,"title":{},"content":{"72":{"position":[[109,9]]},"73":{"position":[[984,8]]}},"keywords":{}}],["вид",{"_index":741,"title":{},"content":{"58":{"position":[[55,4]]},"70":{"position":[[36,5]]},"71":{"position":[[933,5]]}},"keywords":{}}],["видн",{"_index":389,"title":{},"content":{"33":{"position":[[227,6]]},"73":{"position":[[924,5]]},"78":{"position":[[199,5]]}},"keywords":{}}],["влия",{"_index":798,"title":{},"content":{"64":{"position":[[326,6]]}},"keywords":{}}],["вложен",{"_index":968,"title":{"80":{"position":[[0,9]]}},"content":{"80":{"position":[[86,9],[162,11]]},"82":{"position":[[303,9]]}},"keywords":{}}],["вне",{"_index":1022,"title":{},"content":{"87":{"position":[[18,3]]}},"keywords":{}}],["внутр",{"_index":405,"title":{},"content":{"33":{"position":[[658,6]]},"49":{"position":[[435,6]]},"51":{"position":[[78,6]]},"69":{"position":[[30,6]]}},"keywords":{}}],["возвраща",{"_index":829,"title":{},"content":{"65":{"position":[[106,10]]},"70":{"position":[[18,10]]}},"keywords":{}}],["возможн",{"_index":637,"title":{},"content":{"53":{"position":[[2070,11]]},"56":{"position":[[1175,11]]},"61":{"position":[[932,11]]},"64":{"position":[[984,11]]},"67":{"position":[[364,11]]},"80":{"position":[[138,11]]},"89":{"position":[[1699,11],[2693,11]]},"92":{"position":[[501,11]]}},"keywords":{}}],["возникнет",{"_index":548,"title":{},"content":{"46":{"position":[[206,9]]}},"keywords":{}}],["возраст",{"_index":1024,"title":{},"content":{"89":{"position":[[47,7],[93,9],[157,7],[203,9],[377,8]]},"90":{"position":[[163,8]]},"93":{"position":[[760,10],[1012,7],[1121,7],[1160,7]]}},"keywords":{}}],["вопрос",{"_index":910,"title":{},"content":{"74":{"position":[[40,7]]}},"keywords":{}}],["времен",{"_index":840,"title":{},"content":{"67":{"position":[[274,9]]}},"keywords":{}}],["врод",{"_index":885,"title":{},"content":{"71":{"position":[[1373,5]]}},"keywords":{}}],["вход",{"_index":800,"title":{},"content":{"64":{"position":[[522,4]]}},"keywords":{}}],["входн",{"_index":615,"title":{},"content":{"53":{"position":[[43,7]]}},"keywords":{}}],["выбра",{"_index":761,"title":{},"content":{"62":{"position":[[1467,6]]}},"keywords":{}}],["вывод",{"_index":977,"title":{},"content":{"82":{"position":[[220,5]]}},"keywords":{}}],["выделя",{"_index":835,"title":{"67":{"position":[[4,8]]}},"content":{},"keywords":{}}],["выз",{"_index":760,"title":{},"content":{"62":{"position":[[1368,5]]},"92":{"position":[[2840,5],[4405,5],[4979,5]]},"93":{"position":[[174,5]]}},"keywords":{}}],["вызва",{"_index":510,"title":{},"content":{"43":{"position":[[916,7]]},"61":{"position":[[669,6]]},"92":{"position":[[3857,7]]}},"keywords":{}}],["вызов",{"_index":758,"title":{},"content":{"62":{"position":[[1325,6]]},"92":{"position":[[1376,7]]}},"keywords":{}}],["вызовет",{"_index":755,"title":{},"content":{"62":{"position":[[58,7]]}},"keywords":{}}],["вызыва",{"_index":764,"title":{"78":{"position":[[6,10]]}},"content":{"62":{"position":[[1632,8],[1847,10]]},"63":{"position":[[41,8]]},"64":{"position":[[42,10]]},"78":{"position":[[20,10]]},"80":{"position":[[116,8]]},"92":{"position":[[2773,8]]}},"keywords":{}}],["выполнен",{"_index":120,"title":{},"content":{"11":{"position":[[296,10]]},"17":{"position":[[191,10]]},"92":{"position":[[2738,10]]}},"keywords":{}}],["выполнениясниз",{"_index":310,"title":{},"content":{"20":{"position":[[181,17]]}},"keywords":{}}],["выполня",{"_index":196,"title":{},"content":{"15":{"position":[[99,10]]},"17":{"position":[[772,9]]},"73":{"position":[[1558,9]]}},"keywords":{}}],["вырастет",{"_index":184,"title":{},"content":{"13":{"position":[[994,8]]}},"keywords":{}}],["высок",{"_index":563,"title":{},"content":{"46":{"position":[[673,8]]}},"keywords":{}}],["вычисл",{"_index":1040,"title":{},"content":{"90":{"position":[[47,9],[141,9]]}},"keywords":{}}],["вычислен",{"_index":390,"title":{"75":{"position":[[20,10]]}},"content":{"33":{"position":[[242,10]]},"89":{"position":[[1149,10]]},"94":{"position":[[1314,10],[2091,10]]}},"keywords":{}}],["вычисля",{"_index":556,"title":{},"content":{"46":{"position":[[400,9]]},"75":{"position":[[22,9]]}},"keywords":{}}],["гарантирова",{"_index":308,"title":{},"content":{"20":{"position":[[140,14]]}},"keywords":{}}],["генерац",{"_index":143,"title":{"12":{"position":[[0,9]]},"13":{"position":[[0,9]]},"15":{"position":[[0,9]]},"17":{"position":[[0,9]]}},"content":{"13":{"position":[[767,9]]}},"keywords":{}}],["генерирова",{"_index":70,"title":{},"content":{"6":{"position":[[73,12]]},"12":{"position":[[123,12]]},"18":{"position":[[179,14]]}},"keywords":{}}],["готов",{"_index":466,"title":{"39":{"position":[[0,7]]}},"content":{},"keywords":{}}],["группировкапр",{"_index":1098,"title":{},"content":{"93":{"position":[[103,14]]}},"keywords":{}}],["дал",{"_index":867,"title":{},"content":{"70":{"position":[[269,6]]},"89":{"position":[[1072,5]]}},"keywords":{}}],["дальн",{"_index":609,"title":{},"content":{"52":{"position":[[691,10]]}},"keywords":{}}],["дан",{"_index":10,"title":{"28":{"position":[[11,7]]},"59":{"position":[[11,6]]},"60":{"position":[[30,6]]},"62":{"position":[[40,6]]},"65":{"position":[[28,7]]}},"content":{"1":{"position":[[59,6]]},"20":{"position":[[117,7]]},"38":{"position":[[236,6]]},"39":{"position":[[112,6]]},"46":{"position":[[92,8],[742,6]]},"47":{"position":[[169,6],[343,6],[480,6]]},"52":{"position":[[820,6]]},"53":{"position":[[1211,6],[1487,6],[2110,6]]},"57":{"position":[[708,6],[1101,6]]},"58":{"position":[[83,7]]},"60":{"position":[[43,7]]},"61":{"position":[[64,6],[167,7]]},"62":{"position":[[77,6],[722,6],[998,6],[1204,6],[1459,6],[1523,6],[1618,7],[1711,7],[1879,6]]},"63":{"position":[[779,6]]},"64":{"position":[[74,6],[223,6],[304,6],[527,7],[1340,6]]},"65":{"position":[[77,7]]},"67":{"position":[[126,6],[228,6]]},"68":{"position":[[125,6],[397,6],[630,6],[824,6]]},"73":{"position":[[104,6]]},"80":{"position":[[180,6]]},"82":{"position":[[1293,6]]},"93":{"position":[[741,6]]}},"keywords":{}}],["дат",{"_index":1013,"title":{},"content":{"84":{"position":[[900,4]]},"93":{"position":[[973,4]]}},"keywords":{}}],["дебагингаувеличен",{"_index":640,"title":{},"content":{"53":{"position":[[2184,19]]}},"keywords":{}}],["действ",{"_index":239,"title":{},"content":{"17":{"position":[[792,9]]},"33":{"position":[[808,9]]},"43":{"position":[[660,9]]},"69":{"position":[[917,9]]},"71":{"position":[[606,9]]},"73":{"position":[[1189,9],[1580,9]]},"74":{"position":[[125,9]]}},"keywords":{}}],["декомпозиц",{"_index":713,"title":{},"content":{"57":{"position":[[183,12]]}},"keywords":{}}],["дела",{"_index":112,"title":{},"content":{"11":{"position":[[173,6],[656,6]]},"12":{"position":[[67,6]]},"13":{"position":[[755,6]]},"20":{"position":[[77,6]]},"82":{"position":[[213,6]]},"95":{"position":[[696,6],[1099,6]]}},"keywords":{}}],["дефолтн",{"_index":1001,"title":{"83":{"position":[[10,9]]}},"content":{"83":{"position":[[41,9]]},"84":{"position":[[390,9]]}},"keywords":{}}],["динамическ",{"_index":95,"title":{"9":{"position":[[13,12]]}},"content":{"18":{"position":[[228,12]]},"20":{"position":[[223,12]]}},"keywords":{}}],["директор",{"_index":201,"title":{},"content":{"15":{"position":[[220,10],[316,10]]},"49":{"position":[[26,10]]},"86":{"position":[[25,10]]}},"keywords":{}}],["директориязаменя",{"_index":206,"title":{},"content":{"15":{"position":[[393,18]]}},"keywords":{}}],["добав",{"_index":183,"title":{},"content":{"13":{"position":[[963,8]]},"17":{"position":[[174,8]]},"18":{"position":[[420,8]]},"33":{"position":[[423,8]]},"34":{"position":[[375,8]]},"43":{"position":[[2003,9]]},"56":{"position":[[35,8],[141,8],[1187,8],[2658,9]]},"61":{"position":[[944,8]]},"68":{"position":[[479,8]]},"92":{"position":[[513,8]]},"94":{"position":[[1359,9]]}},"keywords":{}}],["добавл",{"_index":154,"title":{},"content":{"13":{"position":[[149,8]]},"56":{"position":[[2289,9]]},"94":{"position":[[559,9],[664,9],[1771,11]]},"95":{"position":[[649,11],[950,9]]}},"keywords":{}}],["добавлен",{"_index":85,"title":{},"content":{"8":{"position":[[49,10]]},"56":{"position":[[338,11]]},"68":{"position":[[315,11]]},"92":{"position":[[1846,10],[2482,12],[2571,12]]}},"keywords":{}}],["добавля",{"_index":925,"title":{},"content":{"75":{"position":[[41,11]]}},"keywords":{}}],["документ",{"_index":410,"title":{},"content":{"33":{"position":[[821,11]]},"43":{"position":[[22,9],[2013,8]]},"47":{"position":[[204,10],[489,11]]}},"keywords":{}}],["документ"",{"_index":384,"title":{},"content":{"33":{"position":[[99,14]]},"34":{"position":[[97,14]]},"47":{"position":[[35,14]]},"68":{"position":[[22,14],[244,14],[523,14],[684,14]]},"73":{"position":[[22,14]]}},"keywords":{}}],["документац",{"_index":13,"title":{},"content":{"1":{"position":[[131,13]]},"7":{"position":[[50,13]]},"8":{"position":[[32,12]]},"39":{"position":[[119,13]]}},"keywords":{}}],["долж",{"_index":149,"title":{"72":{"position":[[14,6]]}},"content":{"13":{"position":[[15,6],[137,6]]},"41":{"position":[[160,6]]},"52":{"position":[[283,6]]},"56":{"position":[[586,6]]},"58":{"position":[[20,6]]},"61":{"position":[[215,6]]},"62":{"position":[[18,6]]},"67":{"position":[[94,6]]},"69":{"position":[[369,6]]},"72":{"position":[[15,6]]},"78":{"position":[[13,6]]},"92":{"position":[[4023,6],[4426,6],[5000,6]]}},"keywords":{}}],["должн",{"_index":8,"title":{},"content":{"1":{"position":[[43,6]]},"7":{"position":[[64,6]]},"46":{"position":[[419,6],[571,6]]},"51":{"position":[[160,6]]},"54":{"position":[[13,6]]},"56":{"position":[[255,6]]},"57":{"position":[[223,6]]},"58":{"position":[[114,6]]},"62":{"position":[[1765,6],[1895,6]]},"64":{"position":[[90,6]]},"78":{"position":[[55,6]]},"82":{"position":[[56,6]]},"89":{"position":[[329,6]]}},"keywords":{}}],["дополнительн",{"_index":368,"title":{},"content":{"32":{"position":[[391,14]]},"33":{"position":[[347,13],[441,14]]},"34":{"position":[[421,14]]},"57":{"position":[[158,14],[486,14]]}},"keywords":{}}],["допустим",{"_index":1097,"title":{},"content":{"93":{"position":[[93,9],[1050,13],[1182,13]]}},"keywords":{}}],["доск",{"_index":90,"title":{},"content":{"8":{"position":[[91,5]]}},"keywords":{}}],["доста",{"_index":240,"title":{},"content":{"17":{"position":[[803,7]]}},"keywords":{}}],["достаточн",{"_index":55,"title":{},"content":{"5":{"position":[[46,10]]}},"keywords":{}}],["достиг",{"_index":652,"title":{},"content":{"56":{"position":[[324,6]]}},"keywords":{}}],["достигнут",{"_index":685,"title":{},"content":{"56":{"position":[[2567,11]]},"92":{"position":[[2536,10]]},"94":{"position":[[1155,11]]}},"keywords":{}}],["достич",{"_index":935,"title":{},"content":{"78":{"position":[[142,7]]}},"keywords":{}}],["доступ",{"_index":234,"title":{"46":{"position":[[28,8]]},"48":{"position":[[19,8]]},"53":{"position":[[0,6]]},"55":{"position":[[26,7]]},"59":{"position":[[22,8]]},"60":{"position":[[47,9]]},"66":{"position":[[13,8]]},"75":{"position":[[31,9]]},"76":{"position":[[14,7]]},"83":{"position":[[36,8]]},"85":{"position":[[32,8]]},"91":{"position":[[22,8]]}},"content":{"17":{"position":[[598,6]]},"19":{"position":[[245,6]]},"32":{"position":[[173,9],[240,8],[432,9],[512,7]]},"33":{"position":[[253,7],[531,8],[798,7]]},"34":{"position":[[412,8]]},"36":{"position":[[46,8],[206,9],[245,8],[323,6]]},"37":{"position":[[81,8]]},"38":{"position":[[46,8],[89,8],[138,10]]},"43":{"position":[[651,6],[826,7]]},"46":{"position":[[10,8],[50,9],[165,7],[410,8],[533,7],[562,8],[599,10],[774,8]]},"47":{"position":[[261,6],[396,6],[617,7]]},"52":{"position":[[856,8]]},"53":{"position":[[97,9],[817,7],[1179,7],[1235,8],[1511,8]]},"54":{"position":[[217,9]]},"57":{"position":[[624,7],[732,7],[1001,7],[1125,7]]},"61":{"position":[[32,7]]},"62":{"position":[[328,7],[690,7],[746,8],[1022,8],[1756,8]]},"67":{"position":[[385,7]]},"68":{"position":[[147,6],[419,6]]},"69":{"position":[[908,6],[1104,6],[1142,6]]},"70":{"position":[[106,7]]},"71":{"position":[[597,6],[895,8],[1415,8],[1494,8]]},"73":{"position":[[1009,9],[1020,6],[1180,6]]},"74":{"position":[[109,6]]},"75":{"position":[[32,8]]},"78":{"position":[[76,10],[222,9]]},"84":{"position":[[260,7],[358,6]]},"89":{"position":[[1160,9]]},"90":{"position":[[67,7]]},"92":{"position":[[3885,7],[3938,8]]},"93":{"position":[[140,7]]},"94":{"position":[[234,8],[757,7],[1325,7],[1848,7],[2102,9]]},"95":{"position":[[1027,7]]}},"keywords":{}}],["доступа"",{"_index":1017,"title":{},"content":{"84":{"position":[[973,13]]}},"keywords":{}}],["доступахлогик",{"_index":541,"title":{},"content":{"45":{"position":[[82,14]]}},"keywords":{}}],["доступеподход",{"_index":459,"title":{},"content":{"38":{"position":[[213,13]]}},"keywords":{}}],["доступн",{"_index":33,"title":{},"content":{"4":{"position":[[33,9]]},"11":{"position":[[272,8]]},"33":{"position":[[114,8]]},"34":{"position":[[112,8]]},"36":{"position":[[377,11]]},"43":{"position":[[32,8],[1751,9]]},"45":{"position":[[34,9]]},"47":{"position":[[50,8],[139,8]]},"56":{"position":[[100,9]]},"68":{"position":[[37,8],[259,8]]},"78":{"position":[[272,9]]},"82":{"position":[[68,8],[226,8]]},"89":{"position":[[26,8],[82,10],[136,8],[192,10]]},"90":{"position":[[151,11]]},"92":{"position":[[1507,8],[2014,9]]},"93":{"position":[[750,9],[1111,9]]},"95":{"position":[[717,9]]}},"keywords":{}}],["доступовзакрыт",{"_index":460,"title":{},"content":{"38":{"position":[[260,16]]}},"keywords":{}}],["доступовимет",{"_index":441,"title":{},"content":{"37":{"position":[[41,13]]}},"keywords":{}}],["доступовпричин",{"_index":540,"title":{},"content":{"45":{"position":[[57,15]]}},"keywords":{}}],["доступовтип",{"_index":539,"title":{},"content":{"45":{"position":[[21,12]]}},"keywords":{}}],["друг",{"_index":463,"title":{},"content":{"38":{"position":[[324,7]]},"54":{"position":[[29,4],[37,5]]},"56":{"position":[[1751,7]]},"61":{"position":[[691,7]]}},"keywords":{}}],["един",{"_index":68,"title":{"44":{"position":[[0,6]]},"53":{"position":[[25,6]]}},"content":{"6":{"position":[[51,6]]},"34":{"position":[[386,6]]},"37":{"position":[[55,6]]},"53":{"position":[[36,6]]},"62":{"position":[[1433,7],[1495,7]]},"82":{"position":[[392,6]]}},"keywords":{}}],["заблокирова",{"_index":848,"title":{},"content":{"68":{"position":[[538,13],[747,13],[875,14]]}},"keywords":{}}],["завис",{"_index":850,"title":{},"content":{"68":{"position":[[619,7]]},"81":{"position":[[148,7]]}},"keywords":{}}],["зависет",{"_index":365,"title":{"72":{"position":[[21,8]]}},"content":{"32":{"position":[[352,8]]},"54":{"position":[[20,8]]},"72":{"position":[[31,8]]}},"keywords":{}}],["зависим",{"_index":246,"title":{},"content":{"18":{"position":[[3,11]]},"47":{"position":[[523,11]]},"72":{"position":[[80,11]]}},"keywords":{}}],["загруж",{"_index":828,"title":{},"content":{"65":{"position":[[67,9]]}},"keywords":{}}],["загружа",{"_index":71,"title":{},"content":{"6":{"position":[[88,9]]}},"keywords":{}}],["загрузк",{"_index":313,"title":{},"content":{"20":{"position":[[214,8]]},"38":{"position":[[227,8]]},"62":{"position":[[1514,8],[1609,8],[1702,8]]}},"keywords":{}}],["закр",{"_index":915,"title":{},"content":{"74":{"position":[[116,6],[180,6],[229,6]]},"79":{"position":[[12,7]]},"80":{"position":[[150,7]]}},"keywords":{}}],["закрыва",{"_index":433,"title":{},"content":{"36":{"position":[[313,9]]},"73":{"position":[[1170,9]]},"81":{"position":[[90,9]]},"82":{"position":[[1393,9]]},"84":{"position":[[348,9]]}},"keywords":{}}],["занов",{"_index":121,"title":{},"content":{"11":{"position":[[360,6]]},"12":{"position":[[60,6]]}},"keywords":{}}],["заполн",{"_index":1012,"title":{},"content":{"84":{"position":[[890,9]]},"93":{"position":[[963,9]]}},"keywords":{}}],["запрашива",{"_index":795,"title":{},"content":{"64":{"position":[[209,13]]}},"keywords":{}}],["запреща",{"_index":861,"title":{},"content":{"69":{"position":[[1132,9]]}},"keywords":{}}],["запрос",{"_index":511,"title":{},"content":{"43":{"position":[[931,7]]},"60":{"position":[[82,9]]},"62":{"position":[[1828,10]]},"64":{"position":[[23,10],[158,7],[372,7]]}},"keywords":{}}],["запуск",{"_index":108,"title":{},"content":{"11":{"position":[[97,7],[685,7]]},"12":{"position":[[97,7]]},"13":{"position":[[364,7],[388,7],[574,7]]},"15":{"position":[[79,8]]},"17":{"position":[[18,7],[214,7]]},"18":{"position":[[100,7],[840,7],[980,7]]}},"keywords":{}}],["запуска",{"_index":43,"title":{},"content":{"4":{"position":[[160,9]]},"17":{"position":[[55,9],[532,9]]},"62":{"position":[[1358,9]]}},"keywords":{}}],["запута",{"_index":647,"title":{},"content":{"54":{"position":[[186,10]]}},"keywords":{}}],["затрат",{"_index":312,"title":{},"content":{"20":{"position":[[203,7]]},"37":{"position":[[11,7]]}},"keywords":{}}],["зацепл",{"_index":578,"title":{},"content":{"47":{"position":[[748,9]]}},"keywords":{}}],["зацеплен",{"_index":550,"title":{"47":{"position":[[23,12]]}},"content":{"46":{"position":[[230,10],[498,10],[682,10]]},"47":{"position":[[226,11],[537,10],[577,10]]}},"keywords":{}}],["зацеплениеправ",{"_index":555,"title":{},"content":{"46":{"position":[[369,18]]}},"keywords":{}}],["защищ",{"_index":933,"title":{},"content":{"78":{"position":[[67,8]]}},"keywords":{}}],["здесьзапуска",{"_index":244,"title":{},"content":{"17":{"position":[[1126,14]]}},"keywords":{}}],["злоумышленник",{"_index":35,"title":{},"content":{"4":{"position":[[58,14]]}},"keywords":{}}],["знает",{"_index":274,"title":{},"content":{"18":{"position":[[586,5]]}},"keywords":{}}],["знан",{"_index":392,"title":{},"content":{"33":{"position":[[286,6]]}},"keywords":{}}],["значен",{"_index":115,"title":{},"content":{"11":{"position":[[217,8],[336,8]]},"13":{"position":[[436,8]]},"17":{"position":[[1092,9]]},"18":{"position":[[916,8]]}},"keywords":{}}],["значительн",{"_index":797,"title":{},"content":{"64":{"position":[[311,11]]},"78":{"position":[[309,11]]}},"keywords":{}}],["избега",{"_index":872,"title":{},"content":{"71":{"position":[[875,8]]}},"keywords":{}}],["избежа",{"_index":560,"title":{},"content":{"46":{"position":[[489,8]]},"92":{"position":[[5422,8]]}},"keywords":{}}],["измен",{"_index":846,"title":{},"content":{"68":{"position":[[188,8]]}},"keywords":{}}],["изменен",{"_index":84,"title":{},"content":{"8":{"position":[[22,9]]},"11":{"position":[[326,9]]},"12":{"position":[[20,9]]},"13":{"position":[[721,10]]},"67":{"position":[[218,9],[403,9]]}},"keywords":{}}],["изменя",{"_index":247,"title":{},"content":{"18":{"position":[[38,10]]}},"keywords":{}}],["именован",{"_index":60,"title":{},"content":{"5":{"position":[[105,11]]}},"keywords":{}}],["имеют",{"_index":1039,"title":{},"content":{"90":{"position":[[11,5]]}},"keywords":{}}],["имплементац",{"_index":587,"title":{},"content":{"49":{"position":[[386,13]]},"87":{"position":[[59,13]]}},"keywords":{}}],["имплементирова",{"_index":362,"title":{},"content":{"32":{"position":[[309,18]]}},"keywords":{}}],["импорт",{"_index":642,"title":{},"content":{"53":{"position":[[2236,7]]},"56":{"position":[[1740,7]]}},"keywords":{}}],["импортир",{"_index":573,"title":{},"content":{"47":{"position":[[288,11],[433,11]]}},"keywords":{}}],["импортиру",{"_index":577,"title":{},"content":{"47":{"position":[[660,10]]}},"keywords":{}}],["инжектир",{"_index":211,"title":{},"content":{"17":{"position":[[116,11]]}},"keywords":{}}],["инжектирова",{"_index":146,"title":{},"content":{"12":{"position":[[149,13]]}},"keywords":{}}],["интерфейс",{"_index":361,"title":{},"content":{"32":{"position":[[279,11]]}},"keywords":{}}],["информац",{"_index":40,"title":{},"content":{"4":{"position":[[127,10]]},"53":{"position":[[84,10]]}},"keywords":{}}],["информацион",{"_index":1113,"title":{},"content":{"94":{"position":[[507,14],[1719,14]]},"95":{"position":[[597,14]]}},"keywords":{}}],["использ",{"_index":18,"title":{"94":{"position":[[22,13]]}},"content":{"2":{"position":[[34,12]]},"13":{"position":[[790,12],[824,12],[877,12]]},"39":{"position":[[88,12]]},"62":{"position":[[1743,12]]},"89":{"position":[[1116,10]]},"94":{"position":[[32,10]]}},"keywords":{}}],["использова",{"_index":20,"title":{"41":{"position":[[18,12]]}},"content":{"2":{"position":[[69,12]]},"5":{"position":[[171,12]]},"7":{"position":[[76,12]]},"18":{"position":[[963,12]]},"32":{"position":[[493,12]]},"33":{"position":[[738,14]]},"41":{"position":[[19,12],[167,14]]},"46":{"position":[[306,12],[578,14]]},"54":{"position":[[292,12]]},"56":{"position":[[1777,12]]},"64":{"position":[[172,14],[486,12],[1401,12]]},"95":{"position":[[36,12]]}},"keywords":{}}],["использован",{"_index":27,"title":{"3":{"position":[[14,13]]},"19":{"position":[[0,13]]},"26":{"position":[[0,13]]},"27":{"position":[[0,13]]},"30":{"position":[[0,13]]},"52":{"position":[[18,14]]},"56":{"position":[[7,14]]},"63":{"position":[[0,14]]},"71":{"position":[[20,13]]}},"content":{"19":{"position":[[5,13]]},"33":{"position":[[606,13]]},"53":{"position":[[1791,14]]},"62":{"position":[[1419,13],[1481,13],[1580,13]]},"64":{"position":[[409,13]]},"65":{"position":[[12,14],[362,13]]},"71":{"position":[[1347,13]]},"78":{"position":[[233,13]]},"80":{"position":[[1,13]]}},"keywords":{}}],["исследован",{"_index":937,"title":{},"content":{"78":{"position":[[174,12]]}},"keywords":{}}],["итогов",{"_index":180,"title":{},"content":{"13":{"position":[[917,8]]}},"keywords":{}}],["кажд",{"_index":127,"title":{"78":{"position":[[21,6]]}},"content":{"11":{"position":[[443,7]]},"15":{"position":[[72,6]]},"58":{"position":[[5,7]]},"62":{"position":[[86,6],[1276,7],[1374,6],[1393,7],[1645,6],[1667,7]]},"78":{"position":[[34,6],[119,7]]},"80":{"position":[[31,6],[79,6]]},"92":{"position":[[1077,7],[1249,7]]}},"keywords":{}}],["как",{"_index":748,"title":{"60":{"position":[[24,5]]}},"content":{},"keywords":{}}],["кастомизац",{"_index":62,"title":{},"content":{"5":{"position":[[198,12]]}},"keywords":{}}],["кейс",{"_index":1056,"title":{},"content":{"92":{"position":[[1320,6],[1341,6],[1501,5],[1674,5],[1802,5],[2008,5],[2132,6],[3982,4],[4459,7],[4947,4],[5453,7]]},"93":{"position":[[215,6]]},"94":{"position":[[490,5],[704,5],[933,5],[1228,5],[1609,6]]}},"keywords":{}}],["классическ",{"_index":103,"title":{},"content":{"11":{"position":[[34,12]]}},"keywords":{}}],["клиент",{"_index":341,"title":{"32":{"position":[[3,7]]}},"content":{"32":{"position":[[462,7]]},"36":{"position":[[237,7],[274,7]]}},"keywords":{}}],["клиентеapi",{"_index":424,"title":{},"content":{"36":{"position":[[91,10]]}},"keywords":{}}],["клиентесист",{"_index":453,"title":{},"content":{"38":{"position":[[58,14]]}},"keywords":{}}],["клиентск",{"_index":419,"title":{},"content":{"34":{"position":[[393,10]]}},"keywords":{}}],["книг",{"_index":648,"title":{},"content":{"56":{"position":[[44,5],[121,5],[350,4],[443,4],[1205,5],[2603,4],[2668,5]]},"61":{"position":[[962,5]]},"64":{"position":[[2209,5]]},"71":{"position":[[1287,5],[2151,5]]},"74":{"position":[[196,5]]},"82":{"position":[[31,5],[269,6]]},"89":{"position":[[20,5],[2715,5]]},"92":{"position":[[531,5],[1208,5],[2084,4],[2201,5],[2678,4],[3662,5],[5133,4]]},"94":{"position":[[540,5],[1191,4],[1369,5],[1676,5],[1752,5]]},"95":{"position":[[338,5],[630,5]]}},"keywords":{}}],["книгепокупк",{"_index":1025,"title":{},"content":{"89":{"position":[[116,12]]}},"keywords":{}}],["книгу"",{"_index":868,"title":{},"content":{"71":{"position":[[34,11]]}},"keywords":{}}],["кнопк",{"_index":382,"title":{},"content":{"33":{"position":[[78,6],[434,6]]},"34":{"position":[[76,6],[357,7]]},"47":{"position":[[13,6]]},"56":{"position":[[218,6]]},"68":{"position":[[1,6],[217,6],[502,6],[663,6],[846,6]]},"71":{"position":[[13,6]]},"73":{"position":[[1,6],[157,7]]}},"keywords":{}}],["кнопкедоступ",{"_index":906,"title":{},"content":{"73":{"position":[[1029,12]]}},"keywords":{}}],["код",{"_index":118,"title":{},"content":{"11":{"position":[[247,4]]},"18":{"position":[[457,3]]},"20":{"position":[[125,3]]},"52":{"position":[[278,4]]},"53":{"position":[[392,4]]},"56":{"position":[[581,4],[1731,4]]},"57":{"position":[[566,5]]},"61":{"position":[[210,4]]},"62":{"position":[[116,4]]},"67":{"position":[[446,5]]},"69":{"position":[[364,4]]},"72":{"position":[[173,5]]},"78":{"position":[[341,4]]},"89":{"position":[[559,4]]},"92":{"position":[[1399,5],[5052,5]]}},"keywords":{}}],["количеств",{"_index":135,"title":{},"content":{"11":{"position":[[551,10]]},"56":{"position":[[110,10],[432,10],[2592,10]]},"92":{"position":[[1835,10],[2073,10],[2471,10],[2560,10],[2667,10],[5122,10],[5437,10]]},"94":{"position":[[1006,10],[1180,10],[1970,10]]}},"keywords":{}}],["команд",{"_index":162,"title":{},"content":{"13":{"position":[[376,7]]},"17":{"position":[[183,7]]}},"keywords":{}}],["комментар",{"_index":740,"title":{},"content":{"58":{"position":[[41,11]]}},"keywords":{}}],["компан",{"_index":178,"title":{},"content":{"13":{"position":[[868,8]]}},"keywords":{}}],["компаниицентрализова",{"_index":442,"title":{},"content":{"37":{"position":[[110,23]]}},"keywords":{}}],["компонент",{"_index":875,"title":{},"content":{"71":{"position":[[922,10],[1361,11]]},"84":{"position":[[218,9]]}},"keywords":{}}],["конкретн",{"_index":458,"title":{},"content":{"38":{"position":[[185,10]]},"46":{"position":[[183,11]]},"65":{"position":[[126,10]]},"69":{"position":[[1151,10]]},"73":{"position":[[146,10]]},"81":{"position":[[100,10]]},"84":{"position":[[232,10]]}},"keywords":{}}],["контейнер",{"_index":142,"title":{},"content":{"11":{"position":[[700,11]]},"12":{"position":[[112,10]]},"13":{"position":[[403,10],[933,10]]},"17":{"position":[[33,10],[222,11],[542,9]]}},"keywords":{}}],["контекст",{"_index":359,"title":{},"content":{"32":{"position":[[251,9]]}},"keywords":{}}],["контрол",{"_index":402,"title":{},"content":{"33":{"position":[[575,9]]},"46":{"position":[[1,8]]}},"keywords":{}}],["конфиг",{"_index":255,"title":{},"content":{"18":{"position":[[249,7]]}},"keywords":{}}],["конфигурац",{"_index":939,"title":{},"content":{"78":{"position":[[247,12]]}},"keywords":{}}],["концентрац",{"_index":543,"title":{"46":{"position":[[8,12]]}},"content":{},"keywords":{}}],["концептуальн",{"_index":347,"title":{},"content":{"32":{"position":[[39,13]]},"51":{"position":[[244,13],[354,13]]}},"keywords":{}}],["концепц",{"_index":890,"title":{},"content":{"71":{"position":[[1471,10]]}},"keywords":{}}],["коп",{"_index":204,"title":{},"content":{"15":{"position":[[264,6]]},"17":{"position":[[892,6]]}},"keywords":{}}],["копирован",{"_index":278,"title":{},"content":{"18":{"position":[[696,11]]}},"keywords":{}}],["корен",{"_index":205,"title":{},"content":{"15":{"position":[[353,6]]}},"keywords":{}}],["котор",{"_index":42,"title":{},"content":{"4":{"position":[[152,7]]},"56":{"position":[[127,7]]}},"keywords":{}}],["куп",{"_index":827,"title":{},"content":{"64":{"position":[[2201,7]]}},"keywords":{}}],["либ",{"_index":89,"title":{},"content":{"8":{"position":[[83,4],[114,4]]},"11":{"position":[[168,4]]},"36":{"position":[[33,4]]}},"keywords":{}}],["лк"",{"_index":1015,"title":{},"content":{"84":{"position":[[916,8]]}},"keywords":{}}],["логик",{"_index":399,"title":{"46":{"position":[[21,6]]},"54":{"position":[[18,6]]},"85":{"position":[[25,6]]}},"content":{"33":{"position":[[524,6]]},"34":{"position":[[436,6]]},"43":{"position":[[924,6]]},"45":{"position":[[1,6]]},"46":{"position":[[543,6],[655,6]]},"47":{"position":[[300,6],[445,6],[671,6]]},"54":{"position":[[197,6],[276,7]]},"71":{"position":[[1408,6]]},"89":{"position":[[361,6]]},"94":{"position":[[76,6]]}},"keywords":{}}],["логирован",{"_index":639,"title":{},"content":{"53":{"position":[[2168,11]]}},"keywords":{}}],["люб",{"_index":432,"title":{},"content":{"36":{"position":[[304,8]]}},"keywords":{}}],["максимальн",{"_index":657,"title":{},"content":{"56":{"position":[[419,12],[2579,12]]},"92":{"position":[[2060,12],[2547,12],[2654,12],[5109,12]]},"94":{"position":[[993,12],[1167,12],[1957,12]]}},"keywords":{}}],["медлен",{"_index":767,"title":{},"content":{"62":{"position":[[1907,10]]},"64":{"position":[[102,10]]}},"keywords":{}}],["меня",{"_index":249,"title":{},"content":{"18":{"position":[[88,7]]}},"keywords":{}}],["мест",{"_index":834,"title":{},"content":{"65":{"position":[[356,5]]}},"keywords":{}}],["местоположен",{"_index":580,"title":{"49":{"position":[[0,15]]},"77":{"position":[[0,15]]},"86":{"position":[[0,15]]}},"content":{},"keywords":{}}],["метод",{"_index":611,"title":{"75":{"position":[[8,7]]}},"content":{"52":{"position":[[799,5]]},"60":{"position":[[26,5]]},"62":{"position":[[31,5],[1291,5],[1441,6],[1503,6],[1696,5],[1860,7]]},"64":{"position":[[55,7],[499,7]]},"69":{"position":[[54,6]]},"75":{"position":[[5,8]]}},"keywords":{}}],["механизм",{"_index":21,"title":{},"content":{"2":{"position":[[86,8]]}},"keywords":{}}],["мним",{"_index":552,"title":{},"content":{"46":{"position":[[264,5]]}},"keywords":{}}],["модалк",{"_index":532,"title":{},"content":{"43":{"position":[[1902,7]]},"56":{"position":[[272,7]]},"73":{"position":[[1057,7]]},"94":{"position":[[720,7],[1811,7]]},"95":{"position":[[990,7]]}},"keywords":{}}],["модельюapi",{"_index":428,"title":{},"content":{"36":{"position":[[170,10]]}},"keywords":{}}],["модул",{"_index":538,"title":{"45":{"position":[[19,7]]},"46":{"position":[[45,7]]},"51":{"position":[[28,8]]},"87":{"position":[[26,6]]}},"content":{"46":{"position":[[139,8],[195,7],[291,8],[328,8],[473,6]]},"47":{"position":[[239,6],[310,6],[366,6],[455,6],[554,9],[589,6],[681,7],[711,6]]},"51":{"position":[[270,6],[380,6]]},"53":{"position":[[115,6]]},"56":{"position":[[1759,6]]},"57":{"position":[[878,7]]},"78":{"position":[[290,6]]},"87":{"position":[[34,6]]}},"keywords":{}}],["модулейпричин",{"_index":561,"title":{},"content":{"46":{"position":[[509,14]]}},"keywords":{}}],["модулямидоступ",{"_index":551,"title":{},"content":{"46":{"position":[[247,16]]}},"keywords":{}}],["может",{"_index":345,"title":{},"content":{"32":{"position":[[18,6]]}},"keywords":{}}],["мок",{"_index":1126,"title":{"95":{"position":[[0,3]]}},"content":{},"keywords":{}}],["молод",{"_index":826,"title":{},"content":{"64":{"position":[[2155,9]]}},"keywords":{}}],["момент",{"_index":978,"title":{},"content":{"82":{"position":[[280,6]]}},"keywords":{}}],["мотивац",{"_index":30,"title":{"4":{"position":[[0,10]]}},"content":{"53":{"position":[[2059,9]]},"62":{"position":[[1409,9]]},"92":{"position":[[5401,9]]}},"keywords":{}}],["мотивациявыз",{"_index":934,"title":{},"content":{"78":{"position":[[88,14]]}},"keywords":{}}],["нажат",{"_index":418,"title":{},"content":{"34":{"position":[[341,7]]},"56":{"position":[[207,7]]}},"keywords":{}}],["назван",{"_index":592,"title":{},"content":{"51":{"position":[[183,8]]},"74":{"position":[[1,8]]}},"keywords":{}}],["найдена"",{"_index":962,"title":{},"content":{"79":{"position":[[1034,13]]}},"keywords":{}}],["найт",{"_index":36,"title":{},"content":{"4":{"position":[[79,5]]}},"keywords":{}}],["налич",{"_index":407,"title":{},"content":{"33":{"position":[[701,7]]}},"keywords":{}}],["например",{"_index":464,"title":{},"content":{"38":{"position":[[343,9]]},"43":{"position":[[1871,9]]}},"keywords":{}}],["напрям",{"_index":373,"title":{"51":{"position":[[9,8]]}},"content":{"32":{"position":[[535,8]]},"72":{"position":[[22,8]]}},"keywords":{}}],["наруша",{"_index":888,"title":{},"content":{"71":{"position":[[1448,8]]}},"keywords":{}}],["настоя",{"_index":252,"title":{},"content":{"18":{"position":[[198,9]]}},"keywords":{}}],["наход",{"_index":150,"title":{},"content":{"13":{"position":[[22,10]]},"49":{"position":[[14,9],[425,9]]},"86":{"position":[[13,9]]}},"keywords":{}}],["начал",{"_index":1066,"title":{},"content":{"92":{"position":[[2730,7]]}},"keywords":{}}],["наш",{"_index":734,"title":{},"content":{"57":{"position":[[871,6]]}},"keywords":{}}],["небольш",{"_index":969,"title":{},"content":{"80":{"position":[[55,9]]}},"keywords":{}}],["неверн",{"_index":395,"title":{},"content":{"33":{"position":[[405,8]]}},"keywords":{}}],["недостаточн",{"_index":729,"title":{},"content":{"57":{"position":[[695,12],[1088,12]]}},"keywords":{}}],["недоступн",{"_index":1021,"title":{},"content":{"87":{"position":[[7,10]]},"92":{"position":[[1680,11],[1808,11],[3899,11],[3987,11]]},"95":{"position":[[1120,11]]}},"keywords":{}}],["нежелательн",{"_index":549,"title":{"47":{"position":[[9,13]]}},"content":{"46":{"position":[[216,13],[355,13]]}},"keywords":{}}],["нейминг",{"_index":909,"title":{"74":{"position":[[0,8]]},"75":{"position":[[0,7]]},"90":{"position":[[0,8]]}},"content":{},"keywords":{}}],["необходим",{"_index":19,"title":{"36":{"position":[[0,10]]}},"content":{"2":{"position":[[58,10]]},"5":{"position":[[160,10]]},"11":{"position":[[349,10],[458,10],[572,11],[645,10]]},"12":{"position":[[82,10]]},"13":{"position":[[267,11]]},"15":{"position":[[48,11]]},"17":{"position":[[44,10],[163,10]]},"18":{"position":[[108,11],[484,10],[509,10]]},"19":{"position":[[30,10]]},"20":{"position":[[63,13]]},"32":{"position":[[470,10]]},"33":{"position":[[336,10],[755,11]]},"36":{"position":[[282,10]]},"43":{"position":[[895,14]]},"46":{"position":[[109,10]]},"52":{"position":[[827,11]]},"53":{"position":[[417,10],[2225,10]]},"54":{"position":[[248,10]]},"56":{"position":[[368,10],[1766,10]]},"57":{"position":[[97,10],[820,10]]},"61":{"position":[[131,10]]},"62":{"position":[[141,10]]},"63":{"position":[[30,10]]},"64":{"position":[[1,10],[475,10]]},"65":{"position":[[308,13]]},"71":{"position":[[864,10]]},"73":{"position":[[1499,10],[1568,11]]},"79":{"position":[[1,10]]},"80":{"position":[[105,10]]},"81":{"position":[[44,10]]},"82":{"position":[[1343,10]]},"89":{"position":[[400,10],[564,10]]},"92":{"position":[[1047,10],[1096,10],[1268,10],[2755,10],[3947,10]]},"93":{"position":[[24,11]]},"94":{"position":[[169,10]]},"95":{"position":[[25,10]]}},"keywords":{}}],["непосредствен",{"_index":116,"title":{},"content":{"11":{"position":[[226,15]]}},"keywords":{}}],["неправильн",{"_index":900,"title":{},"content":{"73":{"position":[[166,12]]}},"keywords":{}}],["непредвиден",{"_index":1119,"title":{},"content":{"94":{"position":[[1288,14],[2065,14]]}},"keywords":{}}],["неэкспортируем",{"_index":275,"title":{},"content":{"18":{"position":[[592,16]]}},"keywords":{}}],["нов",{"_index":86,"title":{},"content":{"8":{"position":[[60,5]]}},"keywords":{}}],["нуж",{"_index":169,"title":{"32":{"position":[[11,5]]}},"content":{"13":{"position":[[508,5]]}},"keywords":{}}],["нужн",{"_index":24,"title":{"60":{"position":[[37,5]]}},"content":{"2":{"position":[[160,5]]},"32":{"position":[[153,5]]},"60":{"position":[[59,5]]},"64":{"position":[[230,5]]}},"keywords":{}}],["обернут",{"_index":765,"title":{},"content":{"62":{"position":[[1783,8]]}},"keywords":{}}],["област",{"_index":376,"title":{},"content":{"33":{"position":[[12,7]]},"34":{"position":[[12,7]]},"51":{"position":[[48,7]]}},"keywords":{}}],["оболочк",{"_index":233,"title":{},"content":{"17":{"position":[[576,9]]}},"keywords":{}}],["обрабатыва",{"_index":1005,"title":{},"content":{"84":{"position":[[377,12]]},"92":{"position":[[4433,14]]}},"keywords":{}}],["обработа",{"_index":509,"title":{},"content":{"43":{"position":[[860,10]]},"65":{"position":[[322,10]]},"81":{"position":[[322,10]]},"82":{"position":[[1264,10]]},"83":{"position":[[30,10]]},"92":{"position":[[1279,10]]}},"keywords":{}}],["обработк",{"_index":306,"title":{"65":{"position":[[0,9]]},"83":{"position":[[0,9]]}},"content":{"20":{"position":[[84,9]]}},"keywords":{}}],["образ",{"_index":106,"title":{},"content":{"11":{"position":[[75,8]]},"13":{"position":[[974,5]]}},"keywords":{}}],["объ",{"_index":186,"title":{},"content":{"13":{"position":[[1013,7]]}},"keywords":{}}],["объедин",{"_index":733,"title":{},"content":{"57":{"position":[[831,10]]}},"keywords":{}}],["объект",{"_index":830,"title":{},"content":{"65":{"position":[[117,6]]},"70":{"position":[[29,6]]}},"keywords":{}}],["огранич",{"_index":836,"title":{},"content":{"67":{"position":[[106,9]]}},"keywords":{}}],["ограничен",{"_index":838,"title":{},"content":{"67":{"position":[[185,11]]},"68":{"position":[[97,11],[369,11]]},"80":{"position":[[187,11]]}},"keywords":{}}],["одинаков",{"_index":905,"title":{},"content":{"73":{"position":[[998,10]]}},"keywords":{}}],["одн",{"_index":446,"title":{"46":{"position":[[39,5]]},"57":{"position":[[23,5]]}},"content":{"37":{"position":[[171,5]]},"46":{"position":[[467,5]]},"57":{"position":[[1,4],[118,5]]},"89":{"position":[[348,4]]},"92":{"position":[[4448,5]]}},"keywords":{}}],["одновремен",{"_index":751,"title":{},"content":{"61":{"position":[[676,12]]}},"keywords":{}}],["однозначн",{"_index":355,"title":{},"content":{"32":{"position":[[191,10]]}},"keywords":{}}],["означа",{"_index":179,"title":{},"content":{"13":{"position":[[901,9]]}},"keywords":{}}],["окружен",{"_index":165,"title":{},"content":{"13":{"position":[[448,9]]},"17":{"position":[[823,9]]}},"keywords":{}}],["онлайн",{"_index":918,"title":{},"content":{"74":{"position":[[202,6]]},"89":{"position":[[2721,6]]}},"keywords":{}}],["описа",{"_index":77,"title":{},"content":{"7":{"position":[[38,9]]},"11":{"position":[[627,9]]},"92":{"position":[[5042,7]]}},"keywords":{}}],["описан",{"_index":940,"title":{},"content":{"78":{"position":[[262,9]]}},"keywords":{}}],["описыва",{"_index":435,"title":{},"content":{"36":{"position":[[367,9]]}},"keywords":{}}],["оплат",{"_index":438,"title":{},"content":{"36":{"position":[[446,10]]},"56":{"position":[[298,7]]},"64":{"position":[[996,8]]},"68":{"position":[[460,8]]},"84":{"position":[[745,8]]},"89":{"position":[[1711,8]]},"94":{"position":[[728,7],[1819,7]]},"95":{"position":[[998,7]]}},"keywords":{}}],["оплата...)описа",{"_index":837,"title":{},"content":{"67":{"position":[[165,19]]}},"keywords":{}}],["оплач",{"_index":414,"title":{},"content":{"34":{"position":[[253,7]]},"56":{"position":[[183,7]]},"57":{"position":[[400,7]]},"64":{"position":[[2028,11]]},"92":{"position":[[1708,7],[2037,7],[2410,9],[2631,7],[4015,7],[4154,9],[5086,7]]}},"keywords":{}}],["оплаченпревыш",{"_index":649,"title":{},"content":{"56":{"position":[[83,16]]}},"keywords":{}}],["определ",{"_index":283,"title":{},"content":{"19":{"position":[[41,10]]}},"keywords":{}}],["определен",{"_index":437,"title":{},"content":{"36":{"position":[[405,12]]},"92":{"position":[[1024,12]]}},"keywords":{}}],["определя",{"_index":749,"title":{},"content":{"60":{"position":[[15,10]]}},"keywords":{}}],["оптимальн",{"_index":799,"title":{},"content":{"64":{"position":[[392,12]]}},"keywords":{}}],["оптимизац",{"_index":190,"title":{"64":{"position":[[0,11]]}},"content":{"13":{"position":[[1055,11]]},"62":{"position":[[1596,12]]}},"keywords":{}}],["организац",{"_index":388,"title":{},"content":{"33":{"position":[[189,12],[391,12],[471,12]]},"47":{"position":[[176,11],[353,12]]},"67":{"position":[[152,12]]},"68":{"position":[[327,12],[488,12]]},"74":{"position":[[249,12]]}},"keywords":{}}],["организации.docact",{"_index":408,"title":{},"content":{"33":{"position":[[709,22]]}},"keywords":{}}],["организацию"",{"_index":570,"title":{},"content":{"47":{"position":[[121,17]]}},"keywords":{}}],["организациякнопк",{"_index":568,"title":{},"content":{"47":{"position":[[89,17]]}},"keywords":{}}],["основ",{"_index":152,"title":{},"content":{"13":{"position":[[82,6]]},"67":{"position":[[119,6]]},"73":{"position":[[1547,6]]},"81":{"position":[[201,6]]},"82":{"position":[[191,6]]}},"keywords":{}}],["основыва",{"_index":844,"title":{},"content":{"68":{"position":[[109,12],[381,12],[808,12]]}},"keywords":{}}],["оставл",{"_index":739,"title":{},"content":{"58":{"position":[[32,8]]}},"keywords":{}}],["осуществля",{"_index":293,"title":{},"content":{"19":{"position":[[269,14]]}},"keywords":{}}],["ответствен",{"_index":814,"title":{},"content":{"64":{"position":[[1353,12]]}},"keywords":{}}],["отвеча",{"_index":756,"title":{},"content":{"62":{"position":[[1211,8]]},"74":{"position":[[28,8]]}},"keywords":{}}],["отдельн",{"_index":129,"title":{},"content":{"11":{"position":[[478,9]]},"41":{"position":[[182,8]]},"62":{"position":[[1686,9]]},"92":{"position":[[1117,9]]}},"keywords":{}}],["отказ",{"_index":454,"title":{"55":{"position":[[17,6]]},"83":{"position":[[27,6]]}},"content":{"38":{"position":[[80,6],[204,6]]},"45":{"position":[[73,6]]},"46":{"position":[[524,6],[646,6]]},"53":{"position":[[2215,6]]},"57":{"position":[[22,6],[519,7]]},"70":{"position":[[97,6],[254,6]]},"81":{"position":[[353,7]]},"82":{"position":[[1283,7],[1321,6]]},"83":{"position":[[63,7]]},"84":{"position":[[251,6],[408,6]]},"92":{"position":[[3929,6]]},"93":{"position":[[131,6]]},"94":{"position":[[226,5]]}},"keywords":{}}],["отказа",{"_index":1115,"title":{},"content":{"94":{"position":[[746,8],[1837,8]]},"95":{"position":[[1016,8]]}},"keywords":{}}],["отказыва",{"_index":508,"title":{},"content":{"43":{"position":[[813,10]]}},"keywords":{}}],["откр",{"_index":651,"title":{},"content":{"56":{"position":[[262,9]]},"68":{"position":[[174,8],[446,8]]},"93":{"position":[[1093,7]]}},"keywords":{}}],["открыва",{"_index":1114,"title":{},"content":{"94":{"position":[[710,9]]}},"keywords":{}}],["открыт",{"_index":531,"title":{},"content":{"43":{"position":[[1893,8]]},"67":{"position":[[376,8]]}},"keywords":{}}],["открыт/закр",{"_index":912,"title":{},"content":{"74":{"position":[[61,13]]}},"keywords":{}}],["отлича",{"_index":348,"title":{},"content":{"32":{"position":[[53,10]]}},"keywords":{}}],["отличн",{"_index":6,"title":{},"content":{"1":{"position":[[18,8]]}},"keywords":{}}],["относ",{"_index":593,"title":{},"content":{"51":{"position":[[258,9],[368,9]]}},"keywords":{}}],["относя",{"_index":553,"title":{},"content":{"46":{"position":[[270,11]]}},"keywords":{}}],["отобража",{"_index":870,"title":{},"content":{"71":{"position":[[56,12]]},"73":{"position":[[37,12]]}},"keywords":{}}],["отобраз",{"_index":654,"title":{},"content":{"56":{"position":[[379,10]]}},"keywords":{}}],["отрендер",{"_index":1002,"title":{},"content":{"84":{"position":[[206,11]]}},"keywords":{}}],["отрицательн",{"_index":1055,"title":{},"content":{"92":{"position":[[1306,13]]},"93":{"position":[[69,13]]}},"keywords":{}}],["ошибк",{"_index":725,"title":{},"content":{"57":{"position":[[642,6],[1019,6]]},"94":{"position":[[964,8],[1259,8],[1303,6],[1928,8],[2036,8],[2080,6]]}},"keywords":{}}],["ошибок",{"_index":447,"title":{},"content":{"37":{"position":[[186,6]]},"57":{"position":[[557,6]]}},"keywords":{}}],["пакет",{"_index":467,"title":{"39":{"position":[[8,5]]}},"content":{"39":{"position":[[53,5]]},"57":{"position":[[451,5]]},"88":{"position":[[41,6]]}},"keywords":{}}],["панел",{"_index":993,"title":{},"content":{"82":{"position":[[1047,7]]}},"keywords":{}}],["парс",{"_index":197,"title":{},"content":{"15":{"position":[[133,6]]}},"keywords":{}}],["паттерн",{"_index":315,"title":{"21":{"position":[[18,8]]},"37":{"position":[[11,8]]},"38":{"position":[[0,7]]}},"content":{"36":{"position":[[134,7],[216,7]]},"39":{"position":[[29,8]]}},"keywords":{}}],["паттернизбежа",{"_index":444,"title":{},"content":{"37":{"position":[[144,15]]}},"keywords":{}}],["перезагруз",{"_index":686,"title":{},"content":{"56":{"position":[[2702,13]]},"64":{"position":[[2234,13]]},"94":{"position":[[1403,13]]}},"keywords":{}}],["переиспольз",{"_index":711,"title":{},"content":{"57":{"position":[[29,16]]}},"keywords":{}}],["переиспользова",{"_index":557,"title":{},"content":{"46":{"position":[[431,17]]},"54":{"position":[[60,16],[259,16]]}},"keywords":{}}],["переиспользован",{"_index":643,"title":{"54":{"position":[[0,17]]},"85":{"position":[[7,17]]}},"content":{"54":{"position":[[98,17]]}},"keywords":{}}],["перемен",{"_index":31,"title":{"18":{"position":[[12,10]]}},"content":{"4":{"position":[[14,10],[250,10]]},"11":{"position":[[200,10]]},"12":{"position":[[34,10],[174,11]]},"13":{"position":[[623,10]]},"15":{"position":[[144,10]]},"17":{"position":[[841,10],[1065,10]]},"18":{"position":[[463,12],[609,10],[661,10],[899,10]]},"19":{"position":[[19,10],[258,10]]}},"keywords":{}}],["перенос",{"_index":887,"title":{},"content":{"71":{"position":[[1398,9]]}},"keywords":{}}],["пересечен",{"_index":646,"title":{},"content":{"54":{"position":[[154,11]]}},"keywords":{}}],["пересобира",{"_index":122,"title":{},"content":{"11":{"position":[[367,12]]}},"keywords":{}}],["перманентн",{"_index":372,"title":{},"content":{"32":{"position":[[481,11]]}},"keywords":{}}],["писа",{"_index":1050,"title":{},"content":{"92":{"position":[[1058,6]]}},"keywords":{}}],["платн",{"_index":386,"title":{},"content":{"33":{"position":[[142,7]]},"34":{"position":[[140,7]]},"68":{"position":[[295,7]]}},"keywords":{}}],["повлия",{"_index":187,"title":{},"content":{"13":{"position":[[1025,8]]}},"keywords":{}}],["повторен",{"_index":445,"title":{},"content":{"37":{"position":[[160,10]]}},"keywords":{}}],["подготавлива",{"_index":629,"title":{},"content":{"53":{"position":[[1472,14]]},"62":{"position":[[983,14]]}},"keywords":{}}],["подготов",{"_index":624,"title":{"62":{"position":[[29,10]]}},"content":{"53":{"position":[[1199,11]]},"62":{"position":[[710,11]]}},"keywords":{}}],["подготовк",{"_index":329,"title":{"28":{"position":[[0,10]]},"59":{"position":[[0,10]]}},"content":{"46":{"position":[[731,10]]},"52":{"position":[[809,10]]},"53":{"position":[[2099,10]]},"60":{"position":[[32,10]]},"62":{"position":[[66,10],[1193,10],[1297,10],[1448,10],[1868,10]]},"64":{"position":[[63,10]]}},"keywords":{}}],["подготовл",{"_index":794,"title":{},"content":{"63":{"position":[[819,13]]}},"keywords":{}}],["поддержива",{"_index":450,"title":{},"content":{"38":{"position":[[11,14]]},"92":{"position":[[2815,12]]}},"keywords":{}}],["поддержк",{"_index":124,"title":{},"content":{"11":{"position":[[413,9],[588,9]]},"39":{"position":[[19,9]]},"72":{"position":[[163,9]]},"78":{"position":[[159,10],[357,9]]},"80":{"position":[[233,10]]}},"keywords":{}}],["подключен",{"_index":567,"title":{},"content":{"47":{"position":[[76,12]]}},"keywords":{}}],["подм",{"_index":277,"title":{},"content":{"18":{"position":[[643,7]]},"95":{"position":[[5,7]]}},"keywords":{}}],["подмен",{"_index":267,"title":{},"content":{"18":{"position":[[495,10],[864,8]]}},"keywords":{}}],["подменя",{"_index":243,"title":{},"content":{"17":{"position":[[1055,9]]}},"keywords":{}}],["подобласт",{"_index":590,"title":{},"content":{"51":{"position":[[26,10],[123,10]]}},"keywords":{}}],["подробн",{"_index":11,"title":{},"content":{"1":{"position":[[95,9]]},"17":{"position":[[1116,9]]}},"keywords":{}}],["подстав",{"_index":164,"title":{},"content":{"13":{"position":[[424,11]]}},"keywords":{}}],["подстановк",{"_index":245,"title":{"18":{"position":[[0,11]]}},"content":{},"keywords":{}}],["подход",{"_index":104,"title":{},"content":{"11":{"position":[[47,7]]},"62":{"position":[[1474,6]]},"82":{"position":[[327,8]]}},"keywords":{}}],["позвол",{"_index":559,"title":{},"content":{"46":{"position":[[480,8]]},"52":{"position":[[680,8]]}},"keywords":{}}],["позволя",{"_index":304,"title":{"37":{"position":[[20,10]]}},"content":{"20":{"position":[[12,10]]},"38":{"position":[[98,9]]},"46":{"position":[[388,11]]},"53":{"position":[[1189,9]]},"62":{"position":[[700,9]]},"78":{"position":[[132,9]]},"81":{"position":[[274,11]]},"82":{"position":[[1254,9]]},"84":{"position":[[196,9]]},"92":{"position":[[5412,9]]}},"keywords":{}}],["показа",{"_index":998,"title":{},"content":{"82":{"position":[[1354,8]]}},"keywords":{}}],["показыва",{"_index":1112,"title":{},"content":{"94":{"position":[[496,10],[939,10],[1234,10]]}},"keywords":{}}],["покр",{"_index":1095,"title":{},"content":{"93":{"position":[[37,7]]}},"keywords":{}}],["покрыва",{"_index":1100,"title":{},"content":{"93":{"position":[[195,9]]}},"keywords":{}}],["покрыт",{"_index":1048,"title":{"92":{"position":[[9,8]]}},"content":{},"keywords":{}}],["политик",{"_index":579,"title":{"48":{"position":[[10,8]]},"50":{"position":[[9,8]]},"51":{"position":[[0,8]]},"53":{"position":[[9,9]]}},"content":{"49":{"position":[[5,8]]},"52":{"position":[[662,9]]}},"keywords":{}}],["полк",{"_index":534,"title":{},"content":{"43":{"position":[[2025,5]]},"56":{"position":[[58,6],[153,5],[358,6],[1199,5],[2302,8],[2611,7],[2677,5]]},"61":{"position":[[956,5]]},"92":{"position":[[525,5],[1217,7],[2092,5],[2210,7],[2686,7],[3671,7],[5141,7]]},"94":{"position":[[677,8],[1199,7],[1378,5],[1685,7]]},"95":{"position":[[347,7],[963,8]]}},"keywords":{}}],["полке"",{"_index":658,"title":{},"content":{"56":{"position":[[451,12]]}},"keywords":{}}],["полку</button>",{"_index":705,"title":{},"content":{"56":{"position":[[3307,20]]}},"keywords":{}}],["полку"",{"_index":650,"title":{},"content":{"56":{"position":[[243,11]]}},"keywords":{}}],["положительн",{"_index":1054,"title":{},"content":{"92":{"position":[[1290,13]]},"93":{"position":[[53,13]]}},"keywords":{}}],["получ",{"_index":750,"title":{},"content":{"61":{"position":[[154,8]]}},"keywords":{}}],["получа",{"_index":9,"title":{},"content":{"1":{"position":[[50,8]]},"20":{"position":[[24,8],[155,8]]},"38":{"position":[[176,8]]},"46":{"position":[[120,8]]},"47":{"position":[[502,8]]}},"keywords":{}}],["получаетлиб",{"_index":109,"title":{},"content":{"11":{"position":[[105,12]]}},"keywords":{}}],["получен",{"_index":100,"title":{"11":{"position":[[9,9]]},"65":{"position":[[18,9]]}},"content":{"11":{"position":[[1,9],[127,10]]},"20":{"position":[[107,9]]},"36":{"position":[[254,10]]},"53":{"position":[[74,9]]},"64":{"position":[[1330,9]]}},"keywords":{}}],["пользовател",{"_index":385,"title":{},"content":{"33":{"position":[[127,12],[300,12],[378,12],[686,12]]},"34":{"position":[[125,12],[272,13]]},"38":{"position":[[149,12]]},"43":{"position":[[942,12]]},"56":{"position":[[13,12],[167,12],[311,12]]},"57":{"position":[[1191,12]]},"67":{"position":[[235,12]]},"68":{"position":[[132,12],[202,13],[279,13],[404,12],[637,13],[703,13],[831,13]]},"71":{"position":[[81,12]]},"73":{"position":[[62,12]]},"82":{"position":[[238,12]]},"89":{"position":[[55,12],[165,12],[386,13]]},"93":{"position":[[947,12],[1020,12],[1145,12]]}},"keywords":{}}],["пользовательск",{"_index":360,"title":{},"content":{"32":{"position":[[261,17]]}},"keywords":{}}],["пользователя)услов",{"_index":842,"title":{},"content":{"67":{"position":[[418,20]]}},"keywords":{}}],["помеща",{"_index":110,"title":{},"content":{"11":{"position":[[118,8]]}},"keywords":{}}],["помощ",{"_index":230,"title":{},"content":{"17":{"position":[[556,6]]},"69":{"position":[[46,7]]},"88":{"position":[[19,7]]}},"keywords":{}}],["пониман",{"_index":942,"title":{},"content":{"78":{"position":[[331,9]]}},"keywords":{}}],["попаст",{"_index":174,"title":{},"content":{"13":{"position":[[713,7]]}},"keywords":{}}],["попроб",{"_index":535,"title":{},"content":{"43":{"position":[[2039,10]]},"56":{"position":[[2691,10]]},"64":{"position":[[2223,10]]},"94":{"position":[[1392,10]]}},"keywords":{}}],["пород",{"_index":554,"title":{},"content":{"46":{"position":[[347,7]]}},"keywords":{}}],["послед",{"_index":400,"title":{},"content":{"33":{"position":[[556,11]]}},"keywords":{}}],["последств",{"_index":897,"title":{},"content":{"72":{"position":[[141,11]]}},"keywords":{}}],["посредств",{"_index":752,"title":{"69":{"position":[[21,11]]}},"content":{"61":{"position":[[706,11]]}},"keywords":{}}],["постро",{"_index":153,"title":{},"content":{"13":{"position":[[104,8]]}},"keywords":{}}],["потер",{"_index":401,"title":{},"content":{"33":{"position":[[568,6]]}},"keywords":{}}],["поэт",{"_index":589,"title":{},"content":{"49":{"position":[[417,7]]},"51":{"position":[[143,7],[293,7],[394,7]]},"82":{"position":[[374,7]]},"94":{"position":[[151,7]]}},"keywords":{}}],["прав",{"_index":87,"title":{},"content":{"8":{"position":[[66,6]]},"46":{"position":[[458,6]]},"86":{"position":[[5,7]]}},"keywords":{}}],["правильн",{"_index":403,"title":{},"content":{"33":{"position":[[586,10]]},"73":{"position":[[1081,10]]}},"keywords":{}}],["превыш",{"_index":1057,"title":{},"content":{"92":{"position":[[1825,9],[2050,9],[2461,9],[2644,9],[5099,9]]},"94":{"position":[[983,9],[1947,9]]}},"keywords":{}}],["предел",{"_index":653,"title":{},"content":{"56":{"position":[[331,6]]}},"keywords":{}}],["предложен",{"_index":83,"title":{},"content":{"8":{"position":[[7,11]]},"56":{"position":[[282,12]]}},"keywords":{}}],["предмет",{"_index":357,"title":{},"content":{"32":{"position":[[221,7]]}},"keywords":{}}],["предметн",{"_index":375,"title":{},"content":{"33":{"position":[[1,10]]},"34":{"position":[[1,10]]},"51":{"position":[[15,10],[37,10],[112,10]]}},"keywords":{}}],["предназначен",{"_index":743,"title":{},"content":{"58":{"position":[[68,14]]}},"keywords":{}}],["предоставля",{"_index":22,"title":{"38":{"position":[[8,14]]}},"content":{"2":{"position":[[117,13]]},"36":{"position":[[102,13],[181,13]]},"41":{"position":[[88,13]]}},"keywords":{}}],["преимуществ",{"_index":303,"title":{"20":{"position":[[0,12]]}},"content":{},"keywords":{}}],["префикс",{"_index":47,"title":{},"content":{"4":{"position":[[261,9]]},"5":{"position":[[211,9]]},"15":{"position":[[192,10]]},"17":{"position":[[854,9]]},"75":{"position":[[53,7]]},"90":{"position":[[17,7]]}},"keywords":{}}],["приватн",{"_index":1019,"title":{"87":{"position":[[8,9]]}},"content":{},"keywords":{}}],["привед",{"_index":562,"title":{},"content":{"46":{"position":[[662,8]]}},"keywords":{}}],["приведет",{"_index":397,"title":{},"content":{"33":{"position":[[488,8]]},"72":{"position":[[98,8]]}},"keywords":{}}],["привнос",{"_index":367,"title":{},"content":{"32":{"position":[[376,9]]}},"keywords":{}}],["привод",{"_index":645,"title":{},"content":{"54":{"position":[[143,8]]}},"keywords":{}}],["приложен",{"_index":5,"title":{"76":{"position":[[30,10]]}},"content":{"1":{"position":[[6,11]]},"4":{"position":[[184,11]]},"5":{"position":[[6,10],[123,10]]},"11":{"position":[[397,10],[538,10]]},"13":{"position":[[283,10]]},"15":{"position":[[360,11]]},"19":{"position":[[324,11]]},"20":{"position":[[129,10]]},"33":{"position":[[543,10],[774,10]]},"37":{"position":[[98,11],[213,11]]},"38":{"position":[[283,10]]},"45":{"position":[[46,10],[114,10]]},"46":{"position":[[19,10]]},"53":{"position":[[59,10],[122,10],[825,10]]},"62":{"position":[[336,10],[1731,11],[1950,10]]},"63":{"position":[[69,11],[762,11]]},"64":{"position":[[145,11],[251,10],[355,10],[1375,11]]},"67":{"position":[[83,10]]},"82":{"position":[[1422,11]]}},"keywords":{}}],["приложениеесл",{"_index":123,"title":{},"content":{"11":{"position":[[380,14]]}},"keywords":{}}],["применен",{"_index":439,"title":{"37":{"position":[[0,10]]}},"content":{},"keywords":{}}],["применя",{"_index":421,"title":{"36":{"position":[[11,9]]}},"content":{},"keywords":{}}],["пример",{"_index":96,"title":{"10":{"position":[[0,7]]},"21":{"position":[[0,6]]},"33":{"position":[[0,6]]},"34":{"position":[[0,6]]},"43":{"position":[[0,7]]},"47":{"position":[[0,6]]},"52":{"position":[[0,6]]},"56":{"position":[[0,6]]},"61":{"position":[[0,7]]},"68":{"position":[[0,7]]},"71":{"position":[[0,6]]},"73":{"position":[[0,7]]},"79":{"position":[[0,7]]},"82":{"position":[[0,7]]},"84":{"position":[[0,7]]},"89":{"position":[[0,7]]}},"content":{"10":{"position":[[1,6]]},"13":{"position":[[206,6]]},"15":{"position":[[1,6]]},"17":{"position":[[725,6]]},"18":{"position":[[278,7]]},"39":{"position":[[103,8]]},"51":{"position":[[202,7]]},"53":{"position":[[176,6],[1784,6]]},"73":{"position":[[933,8]]},"74":{"position":[[100,7]]},"92":{"position":[[1,6]]},"94":{"position":[[1,7]]}},"keywords":{}}],["принима",{"_index":88,"title":{},"content":{"8":{"position":[[73,9]]},"64":{"position":[[507,11]]},"80":{"position":[[199,11]]}},"keywords":{}}],["принцип",{"_index":1045,"title":{"91":{"position":[[0,8]]}},"content":{},"keywords":{}}],["присутств",{"_index":899,"title":{},"content":{"73":{"position":[[122,12]]}},"keywords":{}}],["приход",{"_index":145,"title":{},"content":{"12":{"position":[[48,11]]}},"keywords":{}}],["причин",{"_index":44,"title":{"46":{"position":[[0,7]]},"55":{"position":[[9,7]]},"83":{"position":[[20,6]]}},"content":{"4":{"position":[[212,7]]},"13":{"position":[[840,7]]},"38":{"position":[[73,6],[196,7]]},"43":{"position":[[836,9]]},"46":{"position":[[639,6]]},"57":{"position":[[14,7],[206,7],[511,7]]},"69":{"position":[[1162,8]]},"70":{"position":[[89,7],[245,8]]},"81":{"position":[[345,7]]},"82":{"position":[[1275,7],[1313,7]]},"83":{"position":[[51,7]]},"84":{"position":[[243,7],[400,7]]},"94":{"position":[[783,8],[1874,10]]},"95":{"position":[[1053,10],[1134,8]]}},"keywords":{}}],["пробл",{"_index":139,"title":{"65":{"position":[[10,7]]}},"content":{"11":{"position":[[637,7]]}},"keywords":{}}],["проблем",{"_index":99,"title":{"11":{"position":[[0,8]]}},"content":{"11":{"position":[[311,9]]},"33":{"position":[[203,8]]},"34":{"position":[[207,8]]}},"keywords":{}}],["проверк",{"_index":396,"title":{},"content":{"33":{"position":[[462,8],[789,8]]},"34":{"position":[[289,8]]},"47":{"position":[[334,8],[471,8]]},"89":{"position":[[368,8]]}},"keywords":{}}],["проверя",{"_index":406,"title":{},"content":{"33":{"position":[[671,9]]},"34":{"position":[[241,11],[473,9]]},"73":{"position":[[1510,9]]},"92":{"position":[[3958,9]]},"93":{"position":[[148,9]]}},"keywords":{}}],["провест",{"_index":416,"title":{},"content":{"34":{"position":[[311,8]]}},"keywords":{}}],["проект",{"_index":17,"title":{},"content":{"2":{"position":[[26,7]]},"18":{"position":[[24,7],[131,7]]},"51":{"position":[[56,8],[134,8]]}},"keywords":{}}],["проектирован",{"_index":78,"title":{},"content":{"7":{"position":[[93,14]]}},"keywords":{}}],["произойт",{"_index":722,"title":{},"content":{"57":{"position":[[541,9]]}},"keywords":{}}],["произошл",{"_index":724,"title":{},"content":{"57":{"position":[[632,9],[1009,9]]},"94":{"position":[[1278,9],[2055,9]]}},"keywords":{}}],["происход",{"_index":171,"title":{},"content":{"13":{"position":[[600,11]]},"71":{"position":[[1510,11]]},"73":{"position":[[973,10]]},"92":{"position":[[1348,10]]}},"keywords":{}}],["пройд",{"_index":507,"title":{},"content":{"43":{"position":[[800,9]]}},"keywords":{}}],["пройден",{"_index":1082,"title":{},"content":{"92":{"position":[[4040,10]]}},"keywords":{}}],["пройт",{"_index":533,"title":{},"content":{"43":{"position":[[1951,6]]}},"keywords":{}}],["прост",{"_index":469,"title":{},"content":{"39":{"position":[[11,7]]},"80":{"position":[[225,7]]}},"keywords":{}}],["простот",{"_index":936,"title":{},"content":{"78":{"position":[[150,8],[348,8]]}},"keywords":{}}],["протестирова",{"_index":1109,"title":{},"content":{"94":{"position":[[114,14],[180,14]]}},"keywords":{}}],["противн",{"_index":473,"title":{},"content":{"41":{"position":[[128,9]]}},"keywords":{}}],["прохожден",{"_index":512,"title":{},"content":{"43":{"position":[[955,11]]}},"keywords":{}}],["процесс",{"_index":273,"title":{},"content":{"18":{"position":[[571,9]]}},"keywords":{}}],["прочита",{"_index":346,"title":{},"content":{"32":{"position":[[25,9]]},"89":{"position":[[2705,9]]}},"keywords":{}}],["прочтен",{"_index":1117,"title":{},"content":{"94":{"position":[[1017,9],[1981,11]]}},"keywords":{}}],["прошел",{"_index":411,"title":{},"content":{"34":{"position":[[168,6]]}},"keywords":{}}],["работ",{"_index":0,"title":{"0":{"position":[[0,6]]}},"content":{"2":{"position":[[95,6]]},"38":{"position":[[129,6]]}},"keywords":{}}],["работа",{"_index":66,"title":{},"content":{"6":{"position":[[27,8]]},"11":{"position":[[56,8]]},"36":{"position":[[142,8]]},"51":{"position":[[94,8]]}},"keywords":{}}],["раз",{"_index":185,"title":{},"content":{"13":{"position":[[1005,4]]}},"keywords":{}}],["развертыван",{"_index":137,"title":{},"content":{"11":{"position":[[600,13]]}},"keywords":{}}],["разветвлен",{"_index":272,"title":{},"content":{"18":{"position":[[557,13]]}},"keywords":{}}],["развива",{"_index":443,"title":{},"content":{"37":{"position":[[134,9]]}},"keywords":{}}],["раздач",{"_index":202,"title":{},"content":{"15":{"position":[[235,7],[331,7]]}},"keywords":{}}],["раздел",{"_index":64,"title":{},"content":{"6":{"position":[[6,6]]}},"keywords":{}}],["разметк",{"_index":157,"title":{},"content":{"13":{"position":[[294,8]]}},"keywords":{}}],["разн",{"_index":448,"title":{},"content":{"37":{"position":[[206,6]]},"46":{"position":[[284,6]]},"53":{"position":[[2244,6]]},"57":{"position":[[52,7]]}},"keywords":{}}],["разработк",{"_index":195,"title":{},"content":{"15":{"position":[[37,10]]},"37":{"position":[[22,10]]}},"keywords":{}}],["разработчик",{"_index":175,"title":{},"content":{"13":{"position":[[740,11]]},"38":{"position":[[164,11]]}},"keywords":{}}],["разреша",{"_index":860,"title":{},"content":{"69":{"position":[[1094,9]]}},"keywords":{}}],["разрешен",{"_index":873,"title":{},"content":{"71":{"position":[[884,10],[1483,10]]},"94":{"position":[[213,10]]}},"keywords":{}}],["рамк",{"_index":67,"title":{},"content":{"6":{"position":[[44,6]]},"47":{"position":[[162,6]]},"51":{"position":[[105,6]]}},"keywords":{}}],["ран",{"_index":58,"title":{},"content":{"5":{"position":[[84,5]]}},"keywords":{}}],["располага",{"_index":715,"title":{},"content":{"57":{"position":[[230,13]]}},"keywords":{}}],["расчет",{"_index":370,"title":{},"content":{"32":{"position":[[424,7]]},"46":{"position":[[554,7]]},"57":{"position":[[616,7],[993,7]]}},"keywords":{}}],["расширя",{"_index":429,"title":{},"content":{"36":{"position":[[224,9]]}},"keywords":{}}],["реакц",{"_index":1110,"title":{},"content":{"94":{"position":[[202,7]]}},"keywords":{}}],["реализ",{"_index":572,"title":{},"content":{"47":{"position":[[251,9],[386,9]]},"67":{"position":[[452,11]]}},"keywords":{}}],["реализац",{"_index":314,"title":{"21":{"position":[[7,10]]},"71":{"position":[[7,10]]},"88":{"position":[[0,10]]}},"content":{"37":{"position":[[62,10],[193,10]]},"43":{"position":[[80,10]]},"53":{"position":[[183,11],[2157,10]]},"81":{"position":[[137,10],[296,10]]},"82":{"position":[[101,10],[287,11]]}},"keywords":{}}],["реализова",{"_index":97,"title":{},"content":{"10":{"position":[[8,10]]},"36":{"position":[[15,11]]},"39":{"position":[[42,10]]},"43":{"position":[[1881,11]]},"82":{"position":[[140,10]]},"89":{"position":[[253,11],[336,11],[411,11]]},"94":{"position":[[10,13]]}},"keywords":{}}],["реализу",{"_index":979,"title":{},"content":{"82":{"position":[[382,9]]}},"keywords":{}}],["реализуем",{"_index":1058,"title":{},"content":{"92":{"position":[[2115,11]]},"94":{"position":[[1592,11]]}},"keywords":{}}],["реальн",{"_index":605,"title":{},"content":{"52":{"position":[[269,8]]},"53":{"position":[[383,8]]},"56":{"position":[[572,8],[1722,8]]},"61":{"position":[[201,8]]},"62":{"position":[[107,8]]},"69":{"position":[[355,8]]},"89":{"position":[[550,8]]}},"keywords":{}}],["регистрир",{"_index":623,"title":{},"content":{"53":{"position":[[1162,12]]},"62":{"position":[[673,12],[1259,12]]}},"keywords":{}}],["редактирован",{"_index":908,"title":{},"content":{"73":{"position":[[1065,14]]}},"keywords":{}}],["режим",{"_index":194,"title":{},"content":{"15":{"position":[[30,6]]}},"keywords":{}}],["рекоменд",{"_index":791,"title":{},"content":{"63":{"position":[[738,13]]}},"keywords":{}}],["рендер",{"_index":792,"title":{},"content":{"63":{"position":[[752,9]]},"64":{"position":[[347,7]]}},"keywords":{}}],["рендеринг",{"_index":769,"title":{},"content":{"62":{"position":[[1940,9]]},"64":{"position":[[135,9],[240,10]]}},"keywords":{}}],["репозитор",{"_index":148,"title":{},"content":{"13":{"position":[[3,11],[686,11]]}},"keywords":{}}],["ресурс",{"_index":136,"title":{},"content":{"11":{"position":[[562,9]]}},"keywords":{}}],["решен",{"_index":138,"title":{},"content":{"11":{"position":[[619,7]]},"33":{"position":[[414,7],[597,7]]},"34":{"position":[[366,7]]},"47":{"position":[[216,7],[565,7]]},"56":{"position":[[465,7]]},"71":{"position":[[121,7]]},"73":{"position":[[179,8],[1092,8]]},"89":{"position":[[234,7]]}},"keywords":{}}],["реэкспортирова",{"_index":606,"title":{},"content":{"52":{"position":[[290,18]]},"53":{"position":[[428,16]]},"56":{"position":[[593,18]]},"61":{"position":[[222,18]]},"62":{"position":[[152,16]]},"69":{"position":[[376,18]]},"89":{"position":[[575,16]]}},"keywords":{}}],["рожден",{"_index":1014,"title":{},"content":{"84":{"position":[[905,8]]},"93":{"position":[[978,10],[1136,8]]}},"keywords":{}}],["рол",{"_index":378,"title":{},"content":{"33":{"position":[[26,4],[295,4],[313,5],[681,4]]},"36":{"position":[[127,6],[427,6]]},"67":{"position":[[145,6],[413,4]]},"68":{"position":[[197,4]]}},"keywords":{}}],["ролев",{"_index":427,"title":{},"content":{"36":{"position":[[162,7]]}},"keywords":{}}],["рост",{"_index":714,"title":{},"content":{"57":{"position":[[200,5]]},"72":{"position":[[119,5]]},"73":{"position":[[993,4]]},"92":{"position":[[5431,5]]}},"keywords":{}}],["рут",{"_index":461,"title":{"76":{"position":[[24,5]]}},"content":{"38":{"position":[[277,5]]},"45":{"position":[[108,5]]},"78":{"position":[[282,5]]},"82":{"position":[[313,4]]}},"keywords":{}}],["рутудоступ",{"_index":907,"title":{},"content":{"73":{"position":[[1044,10]]}},"keywords":{}}],["ряд",{"_index":972,"title":{},"content":{"81":{"position":[[124,3]]}},"keywords":{}}],["рядов",{"_index":843,"title":{},"content":{"67":{"position":[[464,7]]}},"keywords":{}}],["сборк",{"_index":134,"title":{},"content":{"11":{"position":[[531,6]]},"12":{"position":[[74,7]]}},"keywords":{}}],["сборок",{"_index":189,"title":{},"content":{"13":{"position":[[1046,6]]}},"keywords":{}}],["сборщик",{"_index":107,"title":{},"content":{"11":{"position":[[85,7]]}},"keywords":{}}],["сведен",{"_index":425,"title":{},"content":{"36":{"position":[[116,8],[195,8],[434,8]]}},"keywords":{}}],["связ",{"_index":371,"title":{},"content":{"32":{"position":[[445,5]]},"78":{"position":[[205,5]]}},"keywords":{}}],["связа",{"_index":374,"title":{"51":{"position":[[18,7]]}},"content":{"32":{"position":[[544,7]]},"46":{"position":[[83,6]]}},"keywords":{}}],["связк",{"_index":426,"title":{},"content":{"36":{"position":[[153,6]]}},"keywords":{}}],["связыван",{"_index":904,"title":{},"content":{"73":{"position":[[946,10]]}},"keywords":{}}],["сгенерир",{"_index":210,"title":{},"content":{"17":{"position":[[86,11]]}},"keywords":{}}],["сгенерирова",{"_index":282,"title":{"19":{"position":[[21,16]]}},"content":{},"keywords":{}}],["сдела",{"_index":32,"title":{},"content":{"4":{"position":[[25,7]]}},"keywords":{}}],["сервер",{"_index":41,"title":{},"content":{"4":{"position":[[140,8]]}},"keywords":{}}],["сервис",{"_index":420,"title":{},"content":{"34":{"position":[[404,7]]},"38":{"position":[[332,10]]}},"keywords":{}}],["сильн",{"_index":132,"title":{},"content":{"11":{"position":[[506,6]]}},"keywords":{}}],["синхрон",{"_index":305,"title":{},"content":{"20":{"position":[[48,10]]}},"keywords":{}}],["систем",{"_index":38,"title":{"51":{"position":[[37,8]]}},"content":{"4":{"position":[[96,7]]},"32":{"position":[[165,7]]},"36":{"position":[[3,7],[38,7]]},"37":{"position":[[33,7],[73,7]]}},"keywords":{}}],["системевозможн",{"_index":564,"title":{},"content":{"46":{"position":[[695,18]]}},"keywords":{}}],["системн",{"_index":721,"title":{},"content":{"57":{"position":[[501,9]]}},"keywords":{}}],["скорост",{"_index":188,"title":{},"content":{"13":{"position":[[1037,8]]}},"keywords":{}}],["скрипт",{"_index":177,"title":{"15":{"position":[[41,7]]}},"content":{"13":{"position":[[808,9]]},"15":{"position":[[115,7]]},"17":{"position":[[70,7],[202,7],[700,6],[749,6]]}},"keywords":{}}],["след",{"_index":105,"title":{},"content":{"11":{"position":[[65,9]]},"17":{"position":[[782,9]]},"18":{"position":[[447,9]]},"62":{"position":[[1817,7]]},"64":{"position":[[12,7]]}},"keywords":{}}],["следова",{"_index":56,"title":{},"content":{"5":{"position":[[64,9]]}},"keywords":{}}],["сло",{"_index":4,"title":{},"content":{"1":{"position":[[1,4]]},"19":{"position":[[319,4]]},"63":{"position":[[64,4]]},"71":{"position":[[1438,5]]}},"keywords":{}}],["сложн",{"_index":898,"title":{},"content":{"72":{"position":[[155,7]]}},"keywords":{}}],["сложност",{"_index":712,"title":{},"content":{"57":{"position":[[173,9]]},"62":{"position":[[1569,10]]}},"keywords":{}}],["случа",{"_index":472,"title":{},"content":{"41":{"position":[[60,7],[138,6]]},"46":{"position":[[74,8]]},"64":{"position":[[1320,6]]},"82":{"position":[[1300,7]]}},"keywords":{}}],["случайн",{"_index":173,"title":{},"content":{"13":{"position":[[704,8]]}},"keywords":{}}],["смен",{"_index":536,"title":{},"content":{"43":{"position":[[2050,7]]}},"keywords":{}}],["снят",{"_index":839,"title":{},"content":{"67":{"position":[[208,5]]}},"keywords":{}}],["собира",{"_index":53,"title":{},"content":{"5":{"position":[[17,10],[134,10]]},"11":{"position":[[469,8]]}},"keywords":{}}],["соблюда",{"_index":762,"title":{},"content":{"62":{"position":[[1546,9]]}},"keywords":{}}],["соглашен",{"_index":59,"title":{"58":{"position":[[0,11]]}},"content":{"5":{"position":[[90,11]]}},"keywords":{}}],["содерж",{"_index":65,"title":{},"content":{"6":{"position":[[13,9]]},"13":{"position":[[254,8]]},"47":{"position":[[608,8]]},"53":{"position":[[804,8]]},"57":{"position":[[477,8]]},"62":{"position":[[315,8]]}},"keywords":{}}],["содержим",{"_index":156,"title":{},"content":{"13":{"position":[[173,10]]},"15":{"position":[[271,11]]},"17":{"position":[[899,11]]}},"keywords":{}}],["созда",{"_index":250,"title":{},"content":{"18":{"position":[[121,7]]},"33":{"position":[[179,9]]},"47":{"position":[[196,7]]},"51":{"position":[[301,9],[402,9]]},"52":{"position":[[654,7]]},"69":{"position":[[13,9]]},"71":{"position":[[1279,7],[2143,7]]},"73":{"position":[[189,7],[1102,7]]},"80":{"position":[[47,7]]},"81":{"position":[[55,7],[188,9]]},"88":{"position":[[7,9]]}},"keywords":{}}],["создава",{"_index":610,"title":{},"content":{"52":{"position":[[702,9]]},"57":{"position":[[148,9]]},"92":{"position":[[1107,9]]}},"keywords":{}}],["создан",{"_index":477,"title":{"50":{"position":[[0,8]]},"52":{"position":[[7,8]]},"69":{"position":[[0,8]]},"81":{"position":[[0,8]]}},"content":{"43":{"position":[[13,8]]},"61":{"position":[[115,8]]},"82":{"position":[[22,8],[260,8]]}},"keywords":{}}],["создаст",{"_index":281,"title":{},"content":{"18":{"position":[[927,7]]}},"keywords":{}}],["соответств",{"_index":999,"title":{},"content":{"82":{"position":[[1363,15]]},"89":{"position":[[68,13],[178,13]]},"92":{"position":[[1361,12],[4070,13]]},"93":{"position":[[1036,13],[1168,13]]},"94":{"position":[[767,15],[1858,15]]},"95":{"position":[[1037,15]]}},"keywords":{}}],["соответствен",{"_index":644,"title":{},"content":{"54":{"position":[[45,14]]}},"keywords":{}}],["соответствова",{"_index":591,"title":{},"content":{"51":{"position":[[167,15]]}},"keywords":{}}],["соста",{"_index":537,"title":{"45":{"position":[[0,6]]}},"content":{},"keywords":{}}],["софт",{"_index":81,"title":{},"content":{"7":{"position":[[126,5]]}},"keywords":{}}],["специфичн",{"_index":369,"title":{},"content":{"32":{"position":[[406,13],[555,14]]}},"keywords":{}}],["способ",{"_index":451,"title":{},"content":{"38":{"position":[[26,6]]}},"keywords":{}}],["сраз",{"_index":938,"title":{},"content":{"78":{"position":[[193,5]]}},"keywords":{}}],["стандартн",{"_index":75,"title":{},"content":{"7":{"position":[[20,11]]},"81":{"position":[[333,11]]}},"keywords":{}}],["стат",{"_index":344,"title":{},"content":{"32":{"position":[[8,6]]}},"keywords":{}}],["статик",{"_index":203,"title":{},"content":{"15":{"position":[[243,7],[339,7]]}},"keywords":{}}],["сторон",{"_index":363,"title":{},"content":{"32":{"position":[[331,7]]}},"keywords":{}}],["страниц",{"_index":687,"title":{"80":{"position":[[10,9]]}},"content":{"56":{"position":[[2716,10]]},"64":{"position":[[2248,10]]},"78":{"position":[[211,8]]},"80":{"position":[[38,8],[96,8]]},"81":{"position":[[111,8],[128,8]]},"82":{"position":[[13,8],[251,8],[1413,8]]},"94":{"position":[[1417,10]]}},"keywords":{}}],["сценар",{"_index":1096,"title":{},"content":{"93":{"position":[[83,9]]}},"keywords":{}}],["счет",{"_index":641,"title":{},"content":{"53":{"position":[[2210,4]]}},"keywords":{}}],["счита",{"_index":1081,"title":{},"content":{"92":{"position":[[4030,9]]}},"keywords":{}}],["так",{"_index":813,"title":{},"content":{"64":{"position":[[1314,5]]}},"keywords":{}}],["тариф",{"_index":851,"title":{},"content":{"68":{"position":[[719,7]]}},"keywords":{}}],["текущ",{"_index":241,"title":{},"content":{"17":{"position":[[814,8]]}},"keywords":{}}],["тест",{"_index":1049,"title":{"92":{"position":[[25,8]]}},"content":{"92":{"position":[[1065,6],[1496,4],[1669,4],[1797,4],[2003,4],[2127,4],[2749,5],[3977,4],[4454,4],[4942,4],[5448,4]]},"93":{"position":[[45,7],[210,4]]},"94":{"position":[[485,4],[699,4],[928,4],[1223,4],[1604,4]]}},"keywords":{}}],["тестирован",{"_index":1046,"title":{"91":{"position":[[9,12]]},"93":{"position":[[0,12]]},"94":{"position":[[0,12]]}},"content":{"92":{"position":[[3916,12]]},"93":{"position":[[5,12],[118,12]]}},"keywords":{}}],["тип",{"_index":284,"title":{},"content":{"19":{"position":[[52,3]]}},"keywords":{}}],["тк",{"_index":269,"title":{},"content":{"18":{"position":[[536,2]]}},"keywords":{}}],["товар",{"_index":805,"title":{},"content":{"64":{"position":[[1005,5]]},"89":{"position":[[129,6],[226,6],[1720,5]]}},"keywords":{}}],["точк",{"_index":613,"title":{"53":{"position":[[32,5]]}},"content":{"53":{"position":[[51,5]]}},"keywords":{}}],["точкерасчет",{"_index":544,"title":{},"content":{"46":{"position":[[38,11]]}},"keywords":{}}],["треб",{"_index":46,"title":{},"content":{"4":{"position":[[234,7]]},"61":{"position":[[54,9]]},"89":{"position":[[243,9]]}},"keywords":{}}],["требован",{"_index":381,"title":{"68":{"position":[[8,11]]}},"content":{"33":{"position":[[66,10],[216,10]]},"34":{"position":[[64,10]]},"36":{"position":[[356,10]]},"43":{"position":[[1,10]]},"47":{"position":[[1,10]]},"54":{"position":[[173,10]]},"56":{"position":[[1,10]]},"67":{"position":[[1,10],[40,10],[479,10]]},"68":{"position":[[605,10],[977,10]]},"71":{"position":[[1,10]]},"73":{"position":[[111,10]]},"81":{"position":[[159,11]]},"82":{"position":[[1,10]]},"89":{"position":[[1,10]]}},"keywords":{}}],["требованиями"",{"_index":856,"title":{},"content":{"68":{"position":[[922,18]]}},"keywords":{}}],["требуем",{"_index":1000,"title":{},"content":{"82":{"position":[[1403,9]]}},"keywords":{}}],["уведомлен",{"_index":655,"title":{},"content":{"56":{"position":[[390,11]]},"94":{"position":[[522,12],[950,11],[1245,11],[1734,12],[1914,11],[2022,11]]},"95":{"position":[[612,12]]}},"keywords":{}}],["увеличива",{"_index":133,"title":{},"content":{"11":{"position":[[513,11]]}},"keywords":{}}],["угод",{"_index":971,"title":{},"content":{"80":{"position":[[213,5]]}},"keywords":{}}],["удобн",{"_index":449,"title":{},"content":{"38":{"position":[[1,7]]}},"keywords":{}}],["указа",{"_index":57,"title":{},"content":{"5":{"position":[[74,9]]},"18":{"position":[[651,9]]},"61":{"position":[[142,7]]},"73":{"position":[[135,7]]},"89":{"position":[[103,10],[213,10]]}},"keywords":{}}],["указыва",{"_index":356,"title":{"60":{"position":[[14,9]]}},"content":{"32":{"position":[[208,9]]},"67":{"position":[[51,9]]},"72":{"position":[[42,9]]}},"keywords":{}}],["улучш",{"_index":455,"title":{},"content":{"38":{"position":[[108,8]]}},"keywords":{}}],["уменьш",{"_index":440,"title":{},"content":{"37":{"position":[[1,9]]}},"keywords":{}}],["управлен",{"_index":423,"title":{},"content":{"36":{"position":[[77,10]]},"74":{"position":[[238,10]]}},"keywords":{}}],["упрост",{"_index":975,"title":{},"content":{"81":{"position":[[286,9]]}},"keywords":{}}],["уровн",{"_index":547,"title":{},"content":{"46":{"position":[[176,6]]},"73":{"position":[[1483,6]]}},"keywords":{}}],["услов",{"_index":431,"title":{},"content":{"36":{"position":[[296,7],[418,8]]},"67":{"position":[[325,7]]},"92":{"position":[[5022,8]]}},"keywords":{}}],["усложня",{"_index":941,"title":{},"content":{"78":{"position":[[321,9]]}},"keywords":{}}],["успешн",{"_index":793,"title":{},"content":{"63":{"position":[[811,7]]},"65":{"position":[[59,7]]},"94":{"position":[[551,7],[1763,7]]},"95":{"position":[[641,7]]}},"keywords":{}}],["участк",{"_index":254,"title":{},"content":{"18":{"position":[[241,7]]}},"keywords":{}}],["учитыва",{"_index":394,"title":{},"content":{"33":{"position":[[361,9]]}},"keywords":{}}],["уязвим",{"_index":37,"title":{},"content":{"4":{"position":[[85,10]]}},"keywords":{}}],["файл",{"_index":172,"title":{"19":{"position":[[38,6]]}},"content":{"13":{"position":[[653,4]]},"15":{"position":[[158,5]]},"17":{"position":[[109,4]]},"18":{"position":[[139,4],[714,5]]},"56":{"position":[[1799,4]]}},"keywords":{}}],["факторн",{"_index":412,"title":{},"content":{"34":{"position":[[180,9]]}},"keywords":{}}],["фасад",{"_index":974,"title":{},"content":{"81":{"position":[[267,6]]}},"keywords":{}}],["финальн",{"_index":1086,"title":{},"content":{"92":{"position":[[4395,9],[4969,9]]}},"keywords":{}}],["фич",{"_index":76,"title":{},"content":{"7":{"position":[[32,5]]},"62":{"position":[[1726,4]]},"71":{"position":[[1428,4]]}},"keywords":{}}],["форм",{"_index":858,"title":{},"content":{"68":{"position":[[992,6]]}},"keywords":{}}],["формат",{"_index":745,"title":{},"content":{"58":{"position":[[135,7]]}},"keywords":{}}],["формирова",{"_index":546,"title":{},"content":{"46":{"position":[[153,11]]}},"keywords":{}}],["формирован",{"_index":452,"title":{"66":{"position":[[0,12]]}},"content":{"38":{"position":[[33,12],[247,12]]},"45":{"position":[[8,12]]},"46":{"position":[[753,12]]},"52":{"position":[[843,12]]},"53":{"position":[[1222,12],[1498,12],[2121,12]]},"54":{"position":[[204,12]]},"57":{"position":[[719,12],[1112,12]]},"60":{"position":[[69,12]]},"61":{"position":[[19,12]]},"62":{"position":[[733,12],[1009,12]]},"64":{"position":[[450,12]]},"92":{"position":[[1328,12]]},"94":{"position":[[83,12]]}},"keywords":{}}],["фреймворк",{"_index":23,"title":{},"content":{"2":{"position":[[131,10]]}},"keywords":{}}],["функц",{"_index":1020,"title":{"87":{"position":[[18,7]]}},"content":{},"keywords":{}}],["функциона",{"_index":436,"title":{},"content":{"36":{"position":[[389,11]]},"67":{"position":[[72,10],[347,12]]},"78":{"position":[[367,12]]}},"keywords":{}}],["функционал",{"_index":845,"title":{},"content":{"68":{"position":[[156,11],[428,11]]}},"keywords":{}}],["функционалабизнес",{"_index":434,"title":{},"content":{"36":{"position":[[338,17]]}},"keywords":{}}],["функционалперманентн",{"_index":841,"title":{},"content":{"67":{"position":[[302,22]]}},"keywords":{}}],["хвата",{"_index":391,"title":{},"content":{"33":{"position":[[264,7]]}},"keywords":{}}],["хран",{"_index":39,"title":{"57":{"position":[[12,8]]}},"content":{"4":{"position":[[120,6]]},"57":{"position":[[108,7]]},"77":{"position":[[18,8]]}},"keywords":{}}],["хранен",{"_index":558,"title":{},"content":{"46":{"position":[[449,8],[630,8]]},"57":{"position":[[802,8]]}},"keywords":{}}],["хранилищ",{"_index":191,"title":{},"content":{"13":{"position":[[1067,10]]}},"keywords":{}}],["централизова",{"_index":422,"title":{},"content":{"36":{"position":[[59,17]]},"46":{"position":[[613,16],[714,16]]},"53":{"position":[[2082,16]]},"57":{"position":[[784,17]]},"65":{"position":[[333,15]]}},"keywords":{}}],["циклическ",{"_index":576,"title":{},"content":{"47":{"position":[[511,11]]}},"keywords":{}}],["част",{"_index":409,"title":{},"content":{"33":{"position":[[767,6]]},"36":{"position":[[332,5]]},"49":{"position":[[379,6]]},"64":{"position":[[1369,5]]},"87":{"position":[[52,6]]}},"keywords":{}}],["чего/к",{"_index":913,"title":{},"content":{"74":{"position":[[79,6]]}},"keywords":{}}],["чекбокс",{"_index":854,"title":{},"content":{"68":{"position":[[895,7]]}},"keywords":{}}],["чему?"",{"_index":914,"title":{},"content":{"74":{"position":[[86,12]]}},"keywords":{}}],["чита",{"_index":12,"title":{},"content":{"1":{"position":[[121,7]]},"17":{"position":[[1102,5]]},"70":{"position":[[261,7]]}},"keywords":{}}],["чтен",{"_index":917,"title":{},"content":{"74":{"position":[[189,6]]},"89":{"position":[[13,6]]}},"keywords":{}}],["шаблон",{"_index":151,"title":{},"content":{"13":{"position":[[66,6]]}},"keywords":{}}],["эд",{"_index":377,"title":{},"content":{"33":{"position":[[21,3]]},"34":{"position":[[21,3]]}},"keywords":{}}],["экспортирова",{"_index":268,"title":{},"content":{"18":{"position":[[520,15]]}},"keywords":{}}],["этап",{"_index":309,"title":{},"content":{"20":{"position":[[175,5]]}},"keywords":{}}],["явля",{"_index":271,"title":{},"content":{"18":{"position":[[548,8]]},"49":{"position":[[370,8]]},"57":{"position":[[330,8],[1207,8]]},"64":{"position":[[380,8]]},"67":{"position":[[12,8],[263,9]]},"71":{"position":[[94,8]]},"73":{"position":[[75,8]]},"87":{"position":[[43,8]]}},"keywords":{}}]],"pipeline":["stemmer","stemmer-ru"]} \ No newline at end of file diff --git a/lunr-index.json b/lunr-index.json index fc4683c..09a8968 100644 --- a/lunr-index.json +++ b/lunr-index.json @@ -1 +1 @@ -{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,925.985]],["content/0",[0,10.056,1,10.056,2,10.056,3,9.072,4,8.338,5,11.549,6,9.072,7,9.072,8,12.084,9,11.549,10,11.549,11,11.549,12,11.549]],["keywords/0",[]],["title/1",[13,835.424]],["content/1",[3,9.253,13,9.253,14,11.778,15,10.256,16,9.253,17,10.256,18,5.458,19,5.978,20,11.778,21,11.778,22,11.778,23,11.778]],["keywords/1",[]],["title/2",[24,754.464,25,506.374,26,754.464]],["content/2",[]],["keywords/2",[]],["title/3",[25,392.366,27,459.239,28,584.599,29,422.056,30,459.239]],["content/3",[19,4.339,25,8.679,27,6.716,30,9.004,31,8.55,32,8.55,33,7.444,34,7.444,35,8.55,36,8.55,37,11.462,38,11.462,39,11.462,40,7.444,41,8.55,42,6.172,43,6.172,44,2.042,45,8.55,46,6.172,47,8.55,48,8.55,49,8.55,50,8.55,51,8.55,52,8.55,53,8.55,54,6.716,55,6.172,56,7.693,57,8.55,58,6.172,59,11.462,60,6.716,61,7.444,62,2.256,63,8.55,64,6.716,65,6.716]],["keywords/3",[]],["title/4",[29,544.691,30,592.678,66,237.38]],["content/4",[19,3.865,25,5.111,44,1.8,58,7.647,62,2.795,67,5.983,68,5.983,69,6.631,70,9.504,71,7.616,72,5.498,73,4.331,74,6.277,75,5.111,76,5.111,77,3.114,78,5.844,79,5.983,80,4.272,81,3.865,82,8.173,83,6.631,84,5.983,85,5.498,86,7.616,87,7.616,88,7.616,89,7.616,90,7.616,91,6.277,92,4.272,93,7.647,94,6.631,95,7.616,96,3.381,97,4.908,98,7.616,99,7.616,100,6.631,101,6.631,102,3.114,103,0.838,104,5.983,105,5.498,106,5.111,107,7.616,108,7.616,109,5.111,110,4.789,111,5.983]],["keywords/4",[]],["title/5",[25,506.374,29,544.691,66,237.38]],["content/5",[29,6.55,44,1.341,54,7.128,58,6.55,67,7.128,68,7.128,69,7.9,72,6.55,73,3.711,74,7.067,75,6.09,76,6.09,77,3.711,78,5.293,79,7.128,80,6.689,83,7.9,91,5.377,92,5.09,93,6.55,96,4.028,103,0.998,104,10.462,106,8.003,112,9.073,113,9.073,114,9.073,115,6.09,116,9.367,117,9.073,118,9.073,119,7.9,120,5.377,121,9.073,122,7.9]],["keywords/5",[]],["title/6",[66,237.38,123,423.253,124,506.374]],["content/6",[]],["keywords/6",[]],["title/7",[103,97.12,125,495.197]],["content/7",[126,7.257,127,7.257,128,12.936]],["keywords/7",[]],["title/8",[129,334.604]],["content/8",[126,7.257,127,7.257,130,12.936]],["keywords/8",[]],["title/9",[131,596.607]],["content/9",[126,7.257,127,7.257,132,12.936]],["keywords/9",[]],["title/10",[133,452.859]],["content/10",[126,7.257,127,7.257,134,12.936]],["keywords/10",[]],["title/11",[102,360.984,133,375.883]],["content/11",[126,7.257,127,7.257,135,12.936]],["keywords/11",[]],["title/12",[102,308.539,103,83.01,136,423.253]],["content/12",[126,7.257,127,7.257,137,12.936]],["keywords/12",[]],["title/13",[138,495.197,139,249.767]],["content/13",[126,7.257,127,7.257,140,12.936]],["keywords/13",[]],["title/14",[141,495.197,142,447.991]],["content/14",[126,7.257,127,7.257,143,12.936]],["keywords/14",[]],["title/15",[102,308.539,141,423.253,142,382.905]],["content/15",[144,9.238,145,12.796,146,12.796,147,9.238]],["keywords/15",[]],["title/16",[103,83.01,148,365.535,149,506.374]],["content/16",[]],["keywords/16",[]],["title/17",[19,334.332,103,72.48,148,319.165,149,442.139]],["content/17",[19,6.882,103,1.61,148,7.09,149,10.227,150,9.79,151,8.732,152,11.116,153,5.151,154,8.732]],["keywords/17",[]],["title/18",[13,835.424]],["content/18",[]],["keywords/18",[]],["title/19",[62,232.899,155,882.706]],["content/19",[8,7.9,27,9.367,43,8.608,44,2.091,62,2.394,70,8.608,73,3.711,77,3.711,109,6.09,124,8.003,151,9.367,156,5.706,157,6.09,158,7.9,159,9.073,160,13.318,161,7.9,162,9.073,163,9.073,164,9.073,165,9.073,166,6.55,167,9.073,168,9.367,169,9.073,170,6.09,171,9.073,172,9.073,173,7.128,174,7.9,175,5.09]],["keywords/19",[]],["title/20",[124,506.374,176,754.464,177,382.905]],["content/20",[43,9.735,44,1.627,97,6.248,120,6.527,123,7.564,178,11.012,179,11.012,180,11.012,181,11.012,182,11.012,183,11.012,184,11.012,185,11.012,186,6.527,187,9.589,188,7.95]],["keywords/20",[]],["title/21",[124,592.447,151,693.42]],["content/21",[44,2.037,78,4.326,97,4.516,122,8.485,139,2.757,177,4.946,189,9.745,190,8.485,191,9.745,192,5.318,193,9.745,194,5.107,195,5.107,196,9.745,197,9.745,198,8.485,199,9.745,200,9.745,201,7.655,202,5.775,203,9.745,204,8.485,205,9.745,206,6.54,207,9.745,208,7.035,209,8.485,210,9.745]],["keywords/21",[]],["title/22",[211,754.464,212,544.691,213,321.274]],["content/22",[3,9.44,66,3.781,124,8.066,139,3.4,156,7.558,212,8.676,213,5.117,214,10.464,215,8.676,216,8.066]],["keywords/22",[]],["title/23",[116,517.495,217,658.758,218,658.758,219,658.758]],["content/23",[]],["keywords/23",[]],["title/24",[66,334.604]],["content/24",[44,1.053,62,1.182,73,1.832,77,2.913,78,1.988,80,2.513,92,2.513,96,1.988,103,0.784,110,2.817,111,5.595,116,7.938,123,2.513,129,2.241,136,2.513,148,2.17,156,2.817,194,1.832,209,3.9,220,2.654,221,4.725,222,4.479,223,3.233,224,2.594,225,3.162,226,2.513,227,4.184,228,5.923,229,5.923,230,3.615,231,2.17,232,2.386,233,2.17,234,2.17,235,8.867,236,7.122,237,3.3,238,3.451,239,3.3,240,2.513,241,3.233,242,2.386,243,2.654,244,2.17,245,2.386,246,3.233,247,2.79,248,2.386,249,3.233,250,3.033,251,2.654,252,4.277,253,2.654,254,2.273,255,4.479,256,4.479,257,2.817,258,3.518,259,3.233,260,4.479,261,4.479,262,4.479,263,2.654,264,2.273,265,3.233,266,3.9,267,1.988,268,3.233,269,3.233,270,7.122,271,4.479,272,1.832,273,4.479,274,3.9,275,4.479,276,4.479,277,6.402,278,4.479,279,3.9,280,3.006,281,4.479,282,2.817,283,3.233,284,4.479]],["keywords/24",[]],["title/25",[103,83.01,120,447.152,125,423.253]],["content/25",[]],["keywords/25",[]],["title/26",[103,83.01,285,754.464,286,349.614]],["content/26",[77,4.865,96,5.281,97,6.546,192,5.066,195,4.865,206,7.985,287,11.897,288,11.897,289,11.897,290,9.346]],["keywords/26",[]],["title/27",[44,77.655,96,233.255,186,311.42,194,214.883,286,243.489,291,525.448]],["content/27",[6,6.021,18,4.93,19,5.4,44,2.218,60,6.021,62,2.022,65,6.021,96,4.723,97,3.552,100,6.674,138,4.3,139,3.01,150,5.534,157,7.141,177,3.89,186,4.543,188,5.534,192,3.264,194,3.135,195,4.351,201,6.021,202,4.543,286,6.426,292,7.665,293,7.665,294,7.665,295,6.674,296,7.665,297,9.264,298,9.599,299,7.665,300,7.665,301,7.665,302,7.665,303,7.665,304,6.674,305,6.674,306,9.264,307,6.674,308,6.674,309,7.665,310,7.665,311,7.665,312,7.665,313,7.665]],["keywords/27",[]],["title/28",[66,237.38,297,656.925,298,592.678]],["content/28",[44,1.825,73,3.197,74,4.633,76,5.246,77,4.41,81,3.967,82,7.238,91,6.392,93,7.786,96,5.481,103,0.86,104,8.472,111,8.472,139,3.494,201,6.14,286,6.987,298,9.699,314,6.806,315,7.817,316,7.817,317,7.817,318,7.817,319,6.806,320,13.312,321,9.39,322,10.784,323,13.312,324,10.784,325,7.817,326,6.806,327,5.643,328,7.817,329,7.817]],["keywords/28",[]],["title/29",[44,97.357,131,369.562,194,269.4,195,269.4]],["content/29",[]],["keywords/29",[]],["title/30",[66,277.729,102,360.984]],["content/30",[1,2.608,4,2.163,18,1.388,19,1.52,62,1.348,73,1.225,74,1.775,77,1.225,78,2.967,80,2.867,91,1.775,92,4.431,103,0.33,115,2.011,119,2.608,129,1.608,136,1.681,153,1.388,175,1.681,208,2.163,213,2.176,224,2.877,225,2.269,227,4.185,228,4.474,229,4.474,230,2.594,231,1.451,232,2.723,233,1.451,234,1.451,237,2.368,238,2.476,239,3.097,240,1.681,242,1.596,244,1.451,245,1.596,247,3.807,248,1.596,250,3.776,252,3.956,253,1.775,254,1.52,263,1.775,264,2.594,267,3.507,268,2.163,269,3.69,272,3.23,277,3.69,280,2.011,282,6.484,283,2.163,286,1.388,314,2.608,330,5.233,331,2.996,332,5.25,333,2.996,334,2.996,335,2.353,336,2.996,337,2.996,338,2.996,339,2.353,340,2.996,341,4.015,342,2.996,343,2.996,344,3.029,345,2.368,346,1.775,347,1.775,348,2.176,349,1.775,350,2.011,351,1.884,352,1.884,353,1.884,354,1.596,355,2.163,356,2.163,357,2.163,358,1.681,359,1.884,360,2.163,361,2.353,362,2.163,363,2.163,364,2.353,365,2.353,366,2.353,367,2.608,368,2.608,369,2.996,370,2.996,371,1.884,372,2.163,373,4.45,374,3.43,375,3.69,376,3.561,377,4.45,378,2.608,379,2.608,380,2.996,381,2.353,382,2.996,383,2.608,384,2.996,385,2.353,386,2.353,387,1.681,388,2.608,389,4.45,390,4.45,391,2.996,392,1.884,393,2.996,394,2.996,395,1.596,396,4.015,397,4.015,398,2.996,399,2.163,400,2.996,401,2.996,402,2.996,403,2.996,404,2.996,405,2.996,406,2.996,407,2.996,408,2.996,409,2.996,410,2.996,411,2.996,412,2.996]],["keywords/30",[]],["title/31",[131,369.562,186,390.43,413,517.495,414,475.595]],["content/31",[18,2.445,44,1.633,58,5.845,60,6.36,62,2.136,78,2.342,80,2.96,103,0.581,115,3.541,129,1.66,131,6.197,139,2.291,144,5.845,157,3.541,186,4.798,187,4.594,188,3.809,192,3.447,194,4.028,195,3.311,212,3.809,213,3.447,221,2.811,224,3.587,227,4.205,286,2.445,306,4.594,327,3.809,345,2.445,348,2.247,371,3.318,413,4.145,414,7.975,415,5.276,416,4.145,417,4.594,418,5.276,419,3.809,420,5.276,421,5.276,422,4.798,423,8.096,424,4.594,425,5.276,426,5.276,427,5.276,428,5.276,429,9.85,430,7.049,431,7.049,432,8.096,433,5.276,434,5.276,435,8.096,436,8.096,437,5.276,438,5.276,439,5.276,440,5.276,441,5.276,442,5.276,443,5.276,444,5.276]],["keywords/31",[]],["title/32",[445,1063.473]],["content/32",[18,5.249,131,7.696,139,3.205,153,5.249,376,6.036,446,7.124,447,11.328,448,11.328,449,8.899,450,11.328,451,11.328,452,11.328,453,11.328,454,11.328,455,11.328]],["keywords/32",[]],["title/33",[44,111.501,129,237.38,456,474.477]],["content/33",[]],["keywords/33",[]],["title/34",[457,835.424]],["content/34",[103,0.783,105,5.135,109,4.774,125,3.99,129,3.692,226,3.99,227,4.312,267,3.157,349,4.216,422,4.216,456,4.473,458,8.79,459,6.193,460,6.193,461,5.135,462,8.473,463,6.193,464,6.193,465,6.193,466,6.193,467,5.135]],["keywords/34",[]],["title/35",[220,523.158,456,555.127]],["content/35",[]],["keywords/35",[]],["title/36",[43,422.056,64,459.239,65,459.239,286,270.899,456,367.65]],["content/36",[18,4.337,34,10.595,66,2.945,67,10.622,68,7.353,81,6.176,103,1.339,105,6.757,125,6.827,129,3.829,161,8.15,243,5.547,251,5.547,286,5.639,319,8.15,354,4.987,467,9.762,468,12.169,469,12.169,470,9.36,471,8.15,472,12.169,473,9.36,474,8.15,475,8.15]],["keywords/36",[]],["title/37",[66,207.267,102,269.4,213,280.519,220,390.43]],["content/37",[44,0.992,62,1.77,81,3.406,103,0.738,129,3.574,138,3.764,139,1.899,153,3.109,192,2.857,213,4.123,223,4.844,224,2.444,225,2.979,226,3.764,227,4.155,228,5.264,229,5.264,230,3.406,231,3.251,232,5.16,233,3.251,234,4.691,237,3.109,238,3.251,239,3.109,240,3.764,241,4.844,242,3.575,243,3.977,244,3.251,245,3.575,246,4.844,247,2.111,248,3.575,249,4.844,307,5.843,344,3.977,345,3.109,346,3.977,347,3.977,348,5.297,353,4.22,371,4.22,395,3.575,414,4.844,416,5.271,456,4.22,476,5.271,477,4.504,478,5.271,479,6.71,480,3.977,481,5.843]],["keywords/37",[]],["title/38",[44,86.397,120,346.478,267,259.513,456,367.65,482,509.021]],["content/38",[44,1.566,62,1.763,66,2.102,97,3.895,102,1.691,103,0.455,120,2.451,123,3.748,129,2.645,136,2.32,138,2.32,139,2.379,157,2.775,166,2.985,177,2.099,188,2.985,192,3.58,195,1.691,198,3.6,213,3.58,224,3.061,225,2.966,226,3.748,227,4.163,228,1.916,229,4.473,231,3.237,232,3.56,233,4.073,234,4.677,237,3.096,238,3.237,239,3.096,243,2.451,244,2.003,247,1.301,250,4.512,252,2.433,267,4.703,272,1.691,286,1.916,327,2.985,344,2.451,345,1.916,346,2.451,347,2.451,348,5.078,349,3.96,351,2.6,352,6.07,354,2.203,358,2.32,368,3.6,392,2.6,395,4.479,461,2.985,466,3.6,476,3.248,477,2.775,478,5.248,482,3.6,483,6.681,484,4.135,485,4.135,486,4.135,487,5.248,488,5.817,489,5.817,490,4.135,491,3.6,492,3.6,493,3.248,494,7.319,495,3.6,496,3.6,497,3.6,498,3.6,499,3.6,500,3.6,501,3.6,502,3.6,503,3.6,504,3.248,505,4.135,506,4.135,507,4.135,508,4.135]],["keywords/38",[]],["title/39",[96,334.918,129,237.38,509,592.678]],["content/39",[18,4.834,19,5.294,44,1.542,55,7.531,62,2.752,72,7.531,73,4.266,96,5.788,103,1.435,129,4.475,133,4.442,192,4.442,208,9.413,305,11.353,509,8.194,510,10.431,511,10.431,512,10.431,513,10.431]],["keywords/39",[]],["title/40",[44,130.454,192,375.883]],["content/40",[]],["keywords/40",[]],["title/41",[103,97.12,514,882.706]],["content/41",[2,10.488,44,1.362,46,6.652,70,8.696,72,6.652,73,5.488,78,4.09,80,5.169,82,6.184,97,4.27,103,1.325,139,3.408,148,4.464,149,6.184,153,4.27,168,7.238,173,9.462,279,8.023,290,7.238,321,8.023,345,4.27,358,5.169,422,7.139,515,9.214,516,6.652,517,9.214,518,7.238,519,9.214,520,9.214,521,9.214,522,9.214,523,9.214]],["keywords/41",[]],["title/42",[66,277.729,73,360.984]],["content/42",[4,5.327,44,1.531,70,5.327,73,4.237,74,8.105,75,8.036,76,8.714,77,4.237,78,6.465,79,5.796,80,5.812,82,6.953,92,4.139,103,1.505,139,3.674,148,3.575,149,4.952,175,4.139,221,3.932,335,8.139,518,8.139,524,11.973,525,10.36,526,7.379,527,7.379,528,11.973,529,10.36,530,7.379,531,6.425,532,7.379,533,7.379,534,7.379,535,7.379,536,7.379,537,7.379,538,7.379,539,7.379]],["keywords/42",[]],["title/43",[103,72.48,213,280.519,220,390.43,540,573.592]],["content/43",[44,1.573,81,3.044,103,0.66,105,4.33,110,3.771,129,3.709,153,2.779,194,2.453,202,3.554,213,3.798,221,3.196,223,4.33,224,2.184,225,2.662,226,3.364,227,4.189,228,4.933,229,4.933,230,3.044,231,2.906,232,4.752,233,2.906,234,4.321,237,2.779,238,2.906,239,2.779,240,3.364,241,4.33,242,3.196,243,3.554,244,2.906,245,3.196,246,4.33,247,2.806,248,3.196,249,4.33,250,2.554,251,3.554,252,3.248,253,3.554,254,3.044,263,3.554,264,3.044,265,4.33,344,3.554,345,2.779,346,3.554,347,3.554,348,5.02,371,3.771,395,3.196,414,4.33,476,4.711,477,4.025,478,4.711,480,3.554,541,5.222,542,5.997,543,5.997,544,5.997]],["keywords/43",[]],["title/44",[54,693.42,103,97.12]],["content/44",[44,1.44,103,1.072,131,7.006,194,5.107,195,5.107,227,4.075,247,3.066,376,6.655,395,5.192,449,7.655,545,9.745,546,8.485,547,8.485,548,8.485,549,10.874,550,9.745,551,9.745,552,9.745,553,9.745,554,8.485]],["keywords/44",[]],["title/45",[66,207.267,102,269.4,103,72.48,123,369.562]],["content/45",[16,3.428,44,1.471,56,2.928,62,1.151,73,1.784,74,2.586,75,2.928,78,1.937,81,3.54,91,2.586,96,1.937,102,1.784,103,0.48,110,2.744,136,3.913,148,2.114,221,3.717,223,3.15,224,3.174,225,3.097,226,2.448,227,4.18,228,3.233,229,4.039,230,2.214,231,2.114,232,2.325,233,2.114,234,2.114,237,3.233,238,3.38,239,3.233,241,3.15,242,2.325,243,2.586,244,2.114,245,2.325,246,3.15,247,3.425,248,2.325,249,3.15,250,2.97,251,2.586,252,3.965,254,2.214,263,2.586,264,3.54,265,3.15,266,3.799,267,3.097,272,3.564,330,3.54,348,2.97,372,3.15,399,6.292,422,2.586,449,3.428,477,2.928,501,3.799,502,7.588,503,3.799,555,4.363,556,8.715,557,3.799,558,3.799,559,4.363,560,6.074,561,3.428,562,6.074,563,3.799,564,3.799,565,6.976,566,4.363,567,3.799,568,6.976,569,6.976,570,6.976,571,6.976,572,4.363,573,4.363,574,4.363,575,3.799,576,4.363,577,4.363,578,4.363,579,3.428,580,4.363,581,4.363,582,4.363,583,4.363,584,4.363]],["keywords/45",[]],["title/46",[55,475.595,56,442.139,103,72.48,153,305.264]],["content/46",[46,8.101,55,8.101,56,9.154,64,8.815,94,9.77,103,1.501,153,5.2,215,8.101,326,9.77,345,5.2,419,8.101,585,8.815,586,9.77,587,11.221,588,11.221]],["keywords/46",[]],["title/47",[66,334.604]],["content/47",[44,1.497,56,3.706,62,2.212,66,1.737,73,2.258,74,4.968,75,3.706,76,3.706,78,2.451,81,4.254,84,4.338,91,4.968,101,4.808,103,1.115,106,3.706,110,5.271,139,1.562,148,2.675,170,3.706,202,3.273,221,4.466,225,3.721,226,4.702,227,4.134,247,3.559,250,4.816,251,6.004,252,4.991,254,5.74,263,6.704,264,5.74,265,8.166,280,3.706,295,4.808,419,3.987,422,3.273,516,3.987,557,4.808,558,9.848,561,4.338,579,4.338,586,4.808,589,5.522,590,4.338,591,5.522,592,8.382,593,5.522,594,5.522,595,5.522,596,5.522,597,5.522,598,5.522,599,5.522,600,5.522]],["keywords/47",[]],["title/48",[601,835.424]],["content/48",[44,1.203,66,2.561,82,5.462,103,0.895,110,5.118,158,7.086,221,4.337,227,4.192,250,6.225,251,4.824,330,4.13,359,5.118,471,7.086,474,7.086,602,7.086,603,8.139,604,8.139,605,8.139,606,8.139,607,8.139,608,9.906,609,8.139,610,7.086,611,7.086,612,8.139,613,11.087,614,6.393,615,6.393,616,8.139,617,8.139]],["keywords/48",[]],["title/49",[44,97.357,85,475.595,480,390.43,601,517.495]],["content/49",[44,1.502,227,4.136,247,4.036,250,5.462,304,8.849,375,9.261,376,6.835,480,6.023,614,7.983,615,7.983,618,10.162,619,8.849,620,8.849,621,8.849,622,10.162]],["keywords/49",[]],["title/50",[44,97.357,96,292.433,133,280.519,509,517.495]],["content/50",[]],["keywords/50",[]],["title/51",[457,835.424]],["content/51",[6,5.907,103,0.827,125,4.218,129,2.366,133,4.47,227,4.321,267,3.338,458,6.547,459,6.547,460,6.547,462,8.732,463,6.547,464,6.547,623,5.047,624,7.519]],["keywords/51",[]],["title/52",[103,64.321,133,248.94,286,270.899,625,584.599,626,584.599]],["content/52",[103,1.336,109,8.148,133,5.17,267,5.389,286,5.626,422,7.195,465,10.571,627,9.537,628,12.14]],["keywords/52",[]],["title/53",[123,495.197,133,375.883]],["content/53",[81,6.357,133,5.334,212,9.043,213,5.334,541,10.906,629,10.906]],["keywords/53",[]],["title/54",[66,334.604]],["content/54",[18,1.549,33,2.91,44,0.494,62,1.479,73,1.367,77,3.467,78,3.215,85,2.413,91,1.981,93,2.413,96,1.484,103,0.617,129,1.764,133,3.084,156,4.554,175,1.875,186,1.981,213,2.387,216,2.243,224,2.637,225,2.489,227,4.179,228,4.377,229,4.377,230,2.845,231,2.716,233,2.716,234,2.716,237,2.598,238,2.716,239,2.598,240,3.145,242,2.987,244,2.716,245,2.987,247,3.586,248,2.987,250,2.387,252,3.956,253,3.323,254,3.675,264,3.675,272,3.467,330,2.845,344,1.981,345,1.549,346,1.981,347,1.981,348,3.084,349,3.323,350,3.763,351,2.102,352,2.102,353,3.526,354,1.781,355,2.413,356,2.413,357,2.413,358,3.145,360,2.413,362,2.413,363,2.413,376,1.781,392,2.102,461,4.047,554,2.91,590,4.404,610,2.91,611,2.91,621,2.91,623,7.291,629,2.91,630,7.421,631,3.526,632,3.342,633,6.306,634,2.91,635,4.881,636,3.342,637,7.843,638,5.689,639,4.404,640,2.91,641,2.91,642,2.91,643,3.342,644,2.91,645,2.91,646,2.91,647,2.91,648,3.342,649,4.881,650,2.91,651,2.91,652,4.881,653,4.881,654,4.881,655,4.881,656,3.342,657,2.91,658,3.342,659,3.342]],["keywords/54",[]],["title/55",[601,835.424]],["content/55",[40,9.885,44,1.246,77,3.447,133,3.589,227,4.154,247,4.322,272,5.617,376,7.87,614,6.621,615,6.621,619,7.338,620,7.338,623,5.657,630,6.621,637,8.196,639,8.918,660,8.428,661,11.353,662,8.428,663,8.428,664,8.428,665,8.428]],["keywords/55",[]],["title/56",[44,111.501,138,423.253,139,213.481]],["content/56",[]],["keywords/56",[]],["title/57",[42,379.351,44,77.655,46,379.351,129,165.324,139,148.679,666,525.448]],["content/57",[42,8.856,129,3.859,138,6.881,139,3.471,192,5.223,259,8.856,480,7.27,667,12.266]],["keywords/57",[]],["title/58",[66,334.604]],["content/58",[44,0.828,62,1.478,92,3.142,129,3.584,139,2.397,153,2.595,192,2.385,208,4.043,213,3.607,220,3.319,224,2.039,225,2.486,227,4.172,228,4.735,229,4.735,230,2.842,231,4.104,232,4.514,233,2.713,234,4.104,237,2.595,238,2.713,239,2.595,240,3.142,242,2.984,244,4.104,245,2.984,247,3.215,248,2.984,250,2.385,252,4.149,253,3.319,254,2.842,258,4.399,263,3.319,264,4.3,272,2.29,282,3.522,330,2.842,344,3.319,345,2.595,346,3.319,347,3.319,348,2.385,349,3.319,350,3.759,351,3.522,352,5.328,353,3.522,354,2.984,355,4.043,356,4.043,357,4.043,358,3.142,359,5.328,360,4.043,361,4.399,362,4.043,363,4.043,364,4.399,365,4.399,366,4.399,475,4.876,540,4.876,590,4.399,634,4.876,657,4.876,668,5.6,669,5.6]],["keywords/58",[]],["title/59",[129,207.267,139,186.4,493,517.495,670,517.495]],["content/59",[16,3.572,18,3.341,44,1.642,62,1.2,97,4.15,102,3.663,103,0.5,120,4.273,129,3.207,138,6.234,139,3.745,153,2.107,154,3.572,177,2.308,192,3.07,204,7.799,213,3.814,216,3.052,224,1.656,225,2.019,226,2.551,227,4.024,228,2.107,229,4.15,231,3.493,232,5.431,233,4.339,234,2.203,237,2.107,238,2.203,239,2.107,243,2.695,244,4.339,247,1.431,250,4.34,252,1.656,259,3.283,267,3.2,327,3.283,344,2.695,345,2.107,346,2.695,347,2.695,348,3.07,349,2.695,351,2.86,352,2.86,354,2.423,395,2.423,417,3.959,446,7.435,480,7.007,487,5.663,488,3.959,489,3.959,491,3.959,492,6.277,493,3.572,494,7.799,495,3.959,496,3.959,497,3.959,498,3.959,499,3.959,500,3.959,504,3.572,585,3.572,602,3.959,671,4.547,672,4.547,673,3.959,674,4.547,675,4.547,676,3.572,677,4.547,678,3.959,679,4.547,680,4.547,681,3.959,682,4.273,683,4.547,684,4.547,685,3.959,686,3.959,687,3.959]],["keywords/59",[]],["title/60",[102,434.909]],["content/60",[62,2.147,97,5.138,103,0.895,139,2.303,224,2.964,227,4.015,247,4.26,252,2.964,272,5.157,399,5.876,575,7.086,670,9.906,682,4.824,688,7.086,689,8.139,690,8.139,691,8.139,692,8.139,693,8.139,694,8.139,695,8.139,696,8.139,697,8.139,698,8.139,699,8.139,700,8.139,701,8.139,702,8.139,703,8.139,704,8.139,705,8.139,706,8.139,707,8.139,708,8.139,709,8.139,710,8.139,711,7.086,712,5.876,713,8.139]],["keywords/60",[]],["title/61",[670,693.42,681,768.588]],["content/61",[7,3.056,18,1.803,19,4.092,42,2.809,62,1.678,97,4.315,102,1.591,103,0.887,109,2.611,115,2.611,129,1.224,133,1.657,136,2.183,138,2.183,139,2.904,150,2.809,166,2.809,175,2.183,192,1.657,224,2.315,225,2.823,227,4.172,228,5.387,229,5.105,230,3.227,231,1.885,233,1.885,234,1.885,237,2.946,238,3.081,239,3.736,240,2.183,242,2.073,244,3.081,245,2.073,247,3.466,248,2.073,250,4.371,252,3.391,253,2.306,254,1.975,259,5.821,264,1.975,267,2.823,268,2.809,269,2.809,272,2.6,277,2.809,283,2.809,290,3.056,330,1.975,348,1.657,350,2.611,353,2.447,358,2.183,367,3.388,373,3.388,374,4.267,375,4.59,376,2.073,386,3.056,387,2.183,388,3.388,389,5.536,390,3.388,422,2.306,461,2.809,480,3.768,585,3.056,623,4.267,633,3.388,635,3.388,637,4.59,638,3.056,649,3.388,650,3.388,651,3.388,652,3.388,653,3.388,654,3.388,655,3.388,682,2.306,685,3.388,686,3.388,687,5.536,711,3.388,714,3.891,715,3.891,716,3.388,717,3.891,718,3.891,719,3.891,720,3.891,721,3.891,722,3.891,723,3.891,724,3.891,725,3.891,726,3.891,727,3.891,728,3.891,729,3.891,730,3.891,731,3.891,732,3.891,733,3.891,734,3.891]],["keywords/61",[]],["title/62",[139,186.4,166,475.595,735,573.592,736,658.758]],["content/62",[62,2.681,102,5.246,103,1.546,131,7.885,139,2.876,148,4.924,157,6.821,202,6.023,227,3.581,257,6.391,374,6.821,395,5.415,546,8.849,547,8.849,548,8.849,712,7.337,737,10.162,738,10.162,739,12.827,740,10.162]],["keywords/62",[]],["title/63",[44,86.397,97,270.899,141,327.959,142,296.696,206,392.366]],["content/63",[]],["keywords/63",[]],["title/64",[457,835.424]],["content/64",[103,0.976,125,4.976,141,4.976,142,4.501,148,4.297,227,4.301,413,6.968,462,9.508,741,7.723,742,7.723,743,6.968,744,7.723]],["keywords/64",[]],["title/65",[142,334.332,147,475.595,446,414.288,682,390.43]],["content/65",[18,4.303,44,1.789,61,8.086,77,3.798,84,7.295,102,3.798,103,1.022,141,6.792,142,6.144,147,9.725,153,4.303,173,7.295,177,4.713,206,6.233,215,8.74,286,4.303,345,4.303,387,5.21,446,7.614,682,5.504,716,8.086,745,9.287,746,9.287,747,9.287,748,12.106,749,9.287,750,9.287,751,9.287,752,9.287,753,9.287,754,9.287]],["keywords/65",[]],["title/66",[66,334.604]],["content/66",[62,1.333,103,0.556,125,2.834,144,3.647,147,5.652,148,2.447,224,2.851,227,4.292,247,3.675,252,3.49,272,3.92,348,4.974,354,2.692,372,5.652,397,6.149,462,6.92,608,3.968,688,4.398,742,4.398,743,6.149,744,6.816,755,5.051,756,5.051,757,5.051,758,4.398,759,4.398,760,6.816,761,6.816,762,4.398,763,4.398,764,4.398,765,6.816,766,5.051,767,5.051,768,5.051,769,7.828,770,3.968,771,7.828,772,5.051,773,5.051,774,5.051,775,5.051,776,5.051,777,5.051,778,5.051,779,5.051]],["keywords/66",[]],["title/67",[387,495.197,780,693.42]],["content/67",[7,8.267,62,2.777,81,5.341,102,4.304,139,2.978,141,7.355,142,6.654,214,9.163,215,7.597,358,5.904,387,7.355,446,8.245,518,8.267,608,8.267,682,6.237,780,10.299,781,10.523,782,10.523,783,10.523]],["keywords/67",[]],["title/68",[141,423.253,142,382.905,220,447.152]],["content/68",[15,8.699,62,2.636,73,4.086,81,6.44,123,7.119,141,7.823,142,7.077,170,6.706,177,5.071,194,4.086,195,4.086,202,5.921,257,6.283,387,7.119,516,7.213,531,8.699,561,7.849,741,8.699,784,9.991,785,11.049,786,9.991,787,9.991]],["keywords/68",[]],["title/69",[66,334.604]],["content/69",[18,2.227,62,1.268,73,1.965,77,3.079,78,2.133,97,2.227,103,0.828,120,2.848,123,4.224,139,1.36,142,2.439,144,6.703,150,3.469,156,3.022,170,3.225,177,2.439,194,3.079,195,3.079,206,3.225,220,4.463,221,4.012,224,2.742,227,4.13,247,3.808,251,4.463,252,2.742,257,3.022,267,2.133,272,3.079,330,3.821,348,5.388,371,3.022,372,3.469,387,5.208,395,4.012,396,5.915,399,5.436,467,3.469,477,3.225,481,4.184,516,3.469,563,6.556,564,4.184,567,4.184,631,3.022,678,4.184,743,5.915,758,4.184,759,4.184,760,4.184,761,6.556,762,4.184,763,4.184,764,4.184,765,4.184,770,3.775,780,3.775,788,4.806,789,4.184,790,4.806,791,4.806,792,4.806,793,4.806,794,6.556,795,4.806,796,6.556,797,4.184,798,6.556,799,9.15,800,4.806,801,6.556,802,4.806,803,4.806,804,4.806,805,4.806,806,4.806,807,4.806,808,4.184,809,4.806,810,4.806,811,4.806,812,4.806,813,4.806]],["keywords/69",[]],["title/70",[44,86.397,194,239.073,195,239.073,735,509.021,814,459.239]],["content/70",[194,5.177,195,5.177,257,7.961,785,11.023,814,9.945]],["keywords/70",[]],["title/71",[66,334.604]],["content/71",[44,1.364,103,1.327,170,4.217,175,3.525,177,3.189,194,3.775,195,3.775,202,3.724,224,2.288,227,4.184,247,3.794,252,4.678,272,2.57,274,5.471,348,4.659,371,3.951,395,4.918,396,7.251,562,5.471,770,4.936,794,5.471,796,5.471,797,8.037,798,5.471,799,10.5,801,8.037,808,9.527,814,4.936,815,6.283,816,6.283,817,6.283,818,5.471,819,9.23,820,9.23,821,4.536,822,9.23,823,6.283,824,6.283,825,5.471,826,5.471,827,5.471,828,6.283,829,6.283,830,6.283]],["keywords/71",[]],["title/72",[44,111.501,831,754.464,832,506.374]],["content/72",[]],["keywords/72",[]],["title/73",[129,207.267,833,658.758,834,658.758,835,475.595]],["content/73",[4,3.446,17,1.695,44,0.518,62,1.774,66,0.613,77,1.432,80,4.573,92,1.092,103,0.525,106,1.307,115,5.472,129,1.502,131,1.965,153,2.212,154,1.53,168,1.53,174,1.695,177,0.988,186,1.154,190,1.695,192,0.829,195,0.796,221,2.543,224,0.709,225,0.864,227,4.202,228,2.212,229,2.212,230,0.988,231,2.312,232,1.866,233,0.943,234,0.943,237,0.902,238,0.943,239,2.702,240,1.092,242,1.038,244,2.825,245,5.578,247,4.192,248,3.991,250,2.032,252,3.933,253,2.829,254,3.801,257,1.225,258,1.53,263,2.829,264,4.922,272,4.416,282,5.127,308,1.695,330,4.137,332,6.404,341,4.58,345,1.623,349,2.076,350,1.307,351,1.225,352,1.225,353,1.225,354,1.038,355,1.406,356,1.406,357,1.406,358,1.092,359,3.001,360,5.886,361,3.749,362,3.446,363,3.446,364,3.749,365,3.749,366,3.749,374,3.203,385,1.53,392,1.225,416,1.53,419,1.406,446,2.203,487,1.53,504,1.53,549,1.695,579,1.53,627,4.58,631,2.203,673,1.695,676,3.749,682,1.154,818,1.695,821,2.528,832,1.307,835,7.294,836,1.947,837,1.947,838,1.947,839,3.749,840,1.695,841,1.695,842,7.937,843,5.855,844,1.695,845,3.502,846,5.83,847,6.521,848,5.855,849,8.152,850,4.773,851,5.83,852,1.947,853,1.947,854,1.947,855,1.947,856,1.947,857,1.947,858,1.947,859,3.502,860,1.947,861,1.947,862,1.947,863,3.502,864,1.947,865,1.947,866,1.947,867,1.947,868,1.947,869,1.947,870,1.947,871,3.502,872,1.947,873,1.947,874,3.502,875,1.947,876,1.947,877,1.947,878,1.947,879,1.947,880,1.947,881,1.947,882,1.947]],["keywords/73",[]],["title/74",[133,375.883,832,592.447]],["content/74",[44,0.869,62,1.551,77,3.593,78,4.67,103,0.647,106,3.945,133,2.503,139,1.663,195,2.404,224,2.141,227,4.159,247,4.395,252,3.831,254,4.459,264,4.459,272,3.593,335,4.618,376,3.132,392,3.697,623,5.897,630,9.17,631,5.525,637,7.595,638,4.618,639,6.902,640,5.118,641,5.118,642,5.118,644,5.118,645,5.118,646,5.118,647,5.118,676,4.618,825,5.118,826,5.118,827,7.65,832,5.897,835,6.343,840,5.118,841,5.118,842,4.618,883,5.878,884,5.878,885,10.52,886,5.878,887,5.878,888,5.878,889,5.878,890,5.878,891,5.878,892,10.52,893,5.878,894,5.878,895,5.878]],["keywords/74",[]],["title/75",[103,72.48,136,369.562,216,442.139,832,442.139]],["content/75",[44,1.549,62,1.069,66,1.274,85,4.743,92,2.272,96,1.798,103,0.723,125,2.272,136,4.65,156,2.547,175,3.686,192,1.725,194,2.687,195,1.656,216,2.718,224,1.475,225,1.798,227,4.161,228,3.044,229,3.044,230,2.055,237,1.877,239,1.877,247,4.005,250,4.061,252,3.018,267,1.798,268,2.924,269,2.924,277,4.743,280,4.409,282,5.997,283,2.924,330,5.32,332,6.511,339,8.818,341,6.511,359,2.547,374,4.409,375,4.743,376,2.158,377,3.526,378,3.526,379,3.526,381,6.511,383,3.526,385,3.182,386,3.182,387,2.272,430,5.72,431,9.774,467,2.924,560,3.526,631,4.132,712,4.743,821,2.924,835,7.568,839,3.182,842,8.235,843,5.72,844,3.526,896,4.05,897,6.57,898,4.05,899,4.05,900,8.288,901,5.72,902,4.05,903,5.72,904,6.57,905,6.57,906,4.05,907,6.57,908,4.05,909,6.57,910,4.05,911,3.526,912,7.217,913,3.526]],["keywords/75",[]],["title/76",[103,97.12,914,882.706]],["content/76",[19,2.726,44,0.794,62,1.417,77,2.197,103,0.591,175,3.014,194,3.357,213,3.495,227,4.195,247,3.78,252,1.956,267,2.385,272,5.388,280,3.605,282,5.162,330,4.166,339,4.22,348,3.495,354,4.373,359,7.013,381,6.448,392,3.378,397,4.22,424,4.677,627,4.22,631,3.378,712,3.878,789,7.147,821,3.878,839,4.22,847,8.673,848,4.677,901,4.677,903,4.677,911,4.677,912,4.677,913,4.677,915,5.372,916,8.208,917,5.372,918,8.208,919,8.208,920,8.208,921,9.96,922,8.208,923,12.012,924,11.151,925,5.372,926,5.372,927,5.372,928,8.208,929,8.208,930,5.372,931,5.372]],["keywords/76",[]]],"invertedIndex":[["",{"_index":227,"title":{},"content":{"24":{"position":[[218,1],[399,1],[401,1],[428,3],[432,1],[449,3],[465,1],[544,3],[574,1],[636,2],[639,3],[643,1],[645,3],[649,1],[685,2],[723,1],[781,1],[783,2],[882,2],[992,1],[1037,1],[1088,1],[1106,1],[1146,3],[1150,1],[1152,1],[1229,1],[1403,1],[1405,1],[1432,3],[1436,1],[1453,3],[1457,1],[1482,1],[1484,2],[1493,1],[1512,1],[1595,1],[1663,1],[1723,1],[1784,2],[1795,1],[1853,1],[1855,2],[1964,2],[1975,1],[2068,2],[2071,2],[2074,1]]},"30":{"position":[[547,2],[632,1],[661,1],[721,1],[907,1],[909,1],[936,3],[940,1],[957,3],[973,1],[1038,2],[1047,1],[1156,3],[1160,2],[1163,3],[1167,1],[1169,3],[1173,1],[1211,2],[1241,1],[1299,1],[1350,1],[1368,1],[1388,1],[1460,1],[1512,1],[1517,1],[1597,1],[1599,1],[1655,1],[1666,3],[1670,1],[1672,1],[1717,2],[1811,1],[1873,1],[1933,1],[1959,1],[2102,1],[2104,1],[2131,3],[2135,1],[2152,3],[2156,1],[2176,1],[2178,2],[2187,1],[2241,1],[2319,1],[2403,1],[2440,1],[2445,1],[2537,1],[2539,1],[2619,2],[2630,1],[2727,2],[2730,2],[2755,1],[2757,2],[2766,1],[2790,1],[2798,2],[2824,1],[2826,2],[2835,1],[2859,1],[2868,2],[2871,1],[2900,1],[3031,1],[3033,1],[3047,2],[3072,1],[3089,2],[3105,1],[3113,2],[3162,2],[3165,1],[3212,1],[3435,2],[3438,3]]},"31":{"position":[[319,1],[321,3],[325,1],[355,1],[357,3],[369,1],[383,3],[387,1],[408,1],[410,3],[427,1],[447,1],[604,1],[606,3],[610,1],[649,1],[651,3],[669,1],[689,3],[693,1],[740,1],[742,3],[758,1],[776,1],[894,1],[915,1],[981,1],[983,3],[987,1],[1026,1],[1028,3],[1046,1],[1082,3],[1086,1],[1133,1],[1135,3],[1151,1],[1185,3],[1189,1],[1224,1],[1226,3],[1238,1],[1252,1]]},"34":{"position":[[48,3],[61,1],[63,3],[80,1],[82,1],[84,3],[96,1],[98,1],[100,1],[102,3],[124,1],[126,1],[128,1],[130,1],[132,3],[146,1],[148,1],[150,1],[152,1],[154,1],[156,3],[187,1],[189,1],[191,1],[193,1],[195,1],[197,3],[219,1],[221,1],[223,1],[225,1],[227,1],[229,3],[253,1],[255,1],[257,1],[259,1],[261,1],[263,3],[276,1],[278,1],[280,1],[282,3],[306,1],[308,1],[310,1],[312,3],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3]]},"37":{"position":[[95,1],[116,1],[143,1],[160,1],[191,1],[216,1],[244,2],[329,1],[358,1],[427,1],[570,1],[572,1],[599,3],[603,1],[620,3],[624,2],[736,1],[796,2],[905,3],[935,1],[997,2],[1000,3],[1004,1],[1006,1]]},"38":{"position":[[203,1],[224,1],[246,1],[282,1],[318,1],[354,1],[378,2],[470,1],[491,1],[528,1],[555,1],[592,1],[677,1],[710,1],[777,1],[798,3],[802,1],[836,2],[869,1],[1093,1],[1120,3],[1124,1],[1141,3],[1145,2],[1263,1],[1313,1],[1378,2],[1392,1],[1461,2],[1464,1],[1466,3],[1470,1],[1520,2],[1542,1],[1544,2],[1624,1],[1673,1],[1675,1],[1677,2],[1720,1],[1779,2],[1828,1],[1890,1],[1917,3],[1921,1],[1938,3],[1942,1],[1979,1],[2053,1],[2055,1]]},"43":{"position":[[181,1],[202,1],[229,1],[246,1],[277,1],[302,1],[330,2],[415,1],[444,1],[513,1],[656,1],[658,1],[685,3],[689,1],[706,3],[722,1],[801,3],[831,1],[893,2],[896,3],[900,1],[902,3],[906,1],[942,2],[980,1],[1038,1],[1089,1],[1091,2],[1127,1],[1129,2],[1209,3],[1213,1],[1215,1]]},"44":{"position":[[59,1],[61,1],[83,3],[87,1],[114,2],[134,3],[138,1],[192,2],[238,2]]},"45":{"position":[[249,1],[359,1],[361,1],[388,3],[392,1],[409,3],[490,3],[520,1],[582,2],[585,3],[589,1],[591,3],[595,1],[631,2],[669,1],[734,1],[785,1],[803,1],[843,3],[847,1],[849,1],[947,1],[958,1],[991,1],[1010,1],[1070,1],[1090,1],[1099,1],[1313,1],[1338,2],[1341,3],[1607,1],[1669,1],[1696,3],[1700,1],[1717,3],[1721,1],[1758,1],[1832,1],[1834,1],[1915,1],[1935,1],[1943,2],[1968,2],[1971,1],[2005,1],[2077,1],[2177,2],[2218,2],[2221,3]]},"47":{"position":[[264,1],[266,3],[305,1],[370,1],[421,1],[439,1],[479,3],[483,1],[523,1],[588,1],[639,1],[657,1],[697,3],[701,1],[736,1],[801,1],[852,1],[870,1],[910,3],[914,1],[916,1],[1248,1],[1250,3],[1289,1],[1354,1],[1405,1],[1423,1],[1463,3],[1467,1],[1469,1]]},"48":{"position":[[288,1],[332,1],[334,3],[338,1],[367,1],[369,3],[373,1],[400,1],[402,3],[406,1],[444,1],[446,3],[450,1],[454,1],[493,1],[495,3],[499,1],[527,1],[529,3],[533,1]]},"49":{"position":[[68,1],[100,1],[125,1],[127,3],[131,1],[135,1],[170,1],[195,1],[197,3],[201,1]]},"51":{"position":[[44,3],[57,1],[59,3],[76,1],[78,1],[80,3],[92,1],[94,1],[96,1],[98,3],[120,1],[122,1],[124,1],[126,1],[128,3],[142,1],[144,1],[146,1],[148,1],[150,3],[161,1],[163,1],[165,1],[167,1],[169,1],[171,3],[194,1],[196,1],[198,1],[200,1],[202,1],[204,3],[228,1],[230,1],[232,1],[234,1],[236,1],[238,3],[251,1],[253,1],[255,1],[257,3],[281,1],[283,1],[285,1],[287,3],[300,1],[302,1],[304,3],[317,1],[319,1],[321,3]]},"54":{"position":[[525,2],[612,1],[625,1],[686,1],[688,1],[737,1],[776,1],[798,1],[849,1],[870,1],[924,1],[1002,1],[1055,1],[1066,3],[1258,1],[1278,1],[1332,1],[1480,1],[1482,1],[1509,3],[1513,1],[1530,3],[1546,1],[1613,2],[1622,1],[1684,2],[1687,3],[1691,1],[1693,3],[1697,1],[1726,2],[1748,1],[1829,1],[1851,1],[1938,2],[1971,1],[2008,1],[2019,3],[2023,1],[2112,1],[2132,1],[2184,1],[2381,1],[2383,1],[2410,3],[2414,1],[2431,3],[2447,1],[2512,2],[2521,1],[2674,3],[2678,2],[2681,3],[2685,1],[2687,3],[2691,1],[2728,2],[2756,1],[2789,1],[2847,1],[2869,1],[2956,2],[2989,1],[3026,1],[3046,1],[3117,1],[3169,1],[3180,3],[3184,2],[3187,1]]},"55":{"position":[[32,1],[41,3],[45,1],[75,2],[105,1],[128,6],[135,3],[139,1],[172,2],[199,1],[255,6],[264,1],[296,1],[319,6],[351,1],[407,6]]},"58":{"position":[[176,2],[261,1],[290,1],[350,1],[536,1],[538,1],[565,3],[569,1],[586,3],[602,1],[648,2],[751,2],[760,1],[913,3],[917,2],[920,3],[924,1],[926,3],[930,1],[968,2],[998,1],[1056,1],[1107,1],[1125,1],[1145,1],[1217,1],[1269,1],[1274,1],[1354,1],[1356,1],[1412,1],[1423,3],[1427,1],[1429,1]]},"59":{"position":[[102,2],[194,1],[215,1],[252,1],[279,1],[309,3],[313,1],[347,2],[380,1],[604,1],[631,3],[635,1],[652,3],[656,2],[774,1],[824,1],[889,2],[903,1],[972,2],[975,1],[977,3],[981,1],[1031,2],[1053,1],[1055,2],[1135,1],[1184,1],[1186,1]]},"60":{"position":[[121,1],[141,1],[162,1],[207,1],[266,1],[352,2],[355,4],[367,1],[621,2],[726,2],[729,3]]},"61":{"position":[[543,1],[563,1],[617,1],[765,1],[767,1],[794,3],[798,1],[815,3],[831,1],[898,2],[907,1],[969,2],[972,3],[976,1],[978,3],[982,1],[1011,2],[1033,1],[1114,1],[1136,1],[1223,2],[1256,1],[1293,1],[1304,3],[1308,1],[1489,1],[1515,1],[1702,1],[1704,1],[1731,3],[1735,1],[1752,3],[1756,1],[1786,1],[1841,1],[1854,1],[1856,2],[1865,1],[1887,1],[1982,1],[2048,1],[2116,1],[2173,1],[2259,2],[2262,2],[2287,1],[2289,2],[2298,1],[2322,1],[2330,2],[2356,1],[2358,2],[2367,1],[2391,1],[2400,2],[2403,1]]},"62":{"position":[[179,1],[181,1],[245,2]]},"64":{"position":[[72,3],[85,1],[87,3],[104,1],[106,1],[108,3],[122,1],[124,1],[126,1],[128,3],[146,1],[148,1],[150,1],[152,1],[154,3],[175,1],[177,1],[179,1],[181,1],[183,3],[210,1],[212,1],[214,1],[216,1],[218,3],[231,1],[233,1],[235,1],[237,3],[250,1],[252,1],[254,3]]},"66":{"position":[[58,3],[75,1],[77,3],[88,1],[90,1],[92,3],[103,1],[105,1],[107,1],[109,3],[128,1],[130,1],[132,3],[142,1],[144,1],[146,1],[148,3],[164,3],[177,1],[179,3],[196,1],[198,1],[200,3],[214,1],[216,1],[218,1],[220,3],[238,1],[240,1],[242,1],[244,1],[246,3],[267,1],[269,1],[271,1],[273,1],[275,3],[302,1],[304,1],[306,1],[308,1],[310,3],[323,1],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3],[408,1],[429,1],[463,1],[481,1],[541,1],[543,2],[552,1],[561,1],[641,2],[644,2],[723,1],[759,1],[793,1],[811,1],[844,1],[868,1],[929,1],[931,2],[940,1],[948,1],[953,1],[955,1],[985,1],[1055,1],[1064,1],[1171,2],[1174,2]]},"69":{"position":[[494,1],[506,1],[529,1],[540,1],[573,1],[599,1],[632,1],[675,1],[708,1],[726,1],[769,1],[771,1],[794,2],[826,1],[849,2],[865,1],[874,1],[1013,1],[1071,2],[1095,1],[1173,2],[1176,2],[1185,2],[1188,2],[1232,2],[1235,3],[1482,1],[1503,1],[1537,1],[1555,1],[1615,1],[1617,2],[1626,1],[1635,1],[1715,2],[1718,2]]},"71":{"position":[[8,1],[22,1],[60,1],[73,1],[103,1],[128,1],[162,1],[164,1],[190,3],[194,1],[268,2],[339,2],[342,3],[346,1],[415,2],[447,1],[449,2],[488,2],[504,1],[532,1],[551,1],[590,1],[632,1],[656,3],[697,1],[775,1],[799,3],[842,1],[932,1],[994,2]]},"73":{"position":[[47,1],[233,1],[235,1],[262,3],[266,1],[283,3],[299,1],[364,2],[373,1],[482,3],[486,2],[489,3],[493,1],[495,3],[499,1],[537,2],[567,1],[625,1],[676,1],[694,1],[714,1],[786,1],[838,1],[843,1],[923,1],[925,1],[981,1],[992,3],[996,1],[998,1],[1176,2],[1185,1],[1225,2],[1234,4],[1239,3],[1433,1],[1491,1],[1493,2],[1580,1],[1598,1],[1618,1],[1666,2],[1740,1],[1792,1],[1794,2],[1860,1],[1940,1],[1942,1],[1998,1],[2000,2],[2107,3],[2111,1],[2169,2],[2178,1],[2218,2],[2227,1],[2265,2],[2274,1],[2282,1],[2288,1],[2290,1],[2320,3],[2374,3],[2426,2],[2435,4],[2501,2],[2510,4],[2590,2],[2599,4],[2700,2],[2709,4],[2714,3],[2718,3],[2908,2],[2917,1],[2931,1],[2939,2],[2964,2],[2967,1],[3050,2],[3059,1],[3081,1],[3130,1],[3173,1],[3219,2],[3270,2],[3279,2],[3291,4],[3296,3],[3322,1],[3377,2],[3430,2],[3492,2],[3495,3],[3509,1],[3579,2],[3629,1],[3635,2],[3638,2],[3679,2],[3688,1],[3726,2],[3735,1],[3743,1],[3749,1],[3751,1],[3781,3],[3835,3],[3839,3],[3843,3],[4170,2],[4179,1],[4187,1],[4193,1],[4195,1],[4240,1],[4254,2],[4257,3],[4386,2],[4389,3],[4495,1],[4553,1],[4604,1],[4622,1],[4642,1],[4714,1],[4766,1],[4771,1],[4851,1],[4853,1],[4909,1],[4911,2],[4961,3],[4965,1],[5155,2],[5164,1],[5172,1],[5178,1],[5180,1],[5225,1],[5296,1],[5331,2],[5334,3],[5338,2],[5341,3],[5395,3]]},"74":{"position":[[254,1],[256,1],[305,1],[344,1],[366,1],[417,1],[438,1],[492,1],[497,1],[580,1],[582,1],[635,1],[646,3],[682,2],[691,1],[717,2],[726,1],[771,2],[780,1],[799,1],[932,3],[989,2],[998,4],[1064,2],[1073,4],[1078,3],[1129,1],[1196,2],[1205,4],[1210,3]]},"75":{"position":[[265,1],[295,1],[405,1],[407,1],[435,1],[455,1],[480,1],[482,2],[621,1],[694,1],[696,2],[795,1],[882,1],[884,1],[886,1],[923,1],[925,2],[1030,1],[1123,1],[1125,1],[1127,1],[1207,2],[1218,1],[1220,2],[1428,2],[1431,2],[1460,1],[1462,2],[1471,1],[1499,1],[1507,2],[1537,1],[1539,2],[1548,1],[1576,1],[1585,2],[1588,1],[1644,2],[1653,1],[1693,2],[1702,1],[1783,2],[1792,4],[1885,2],[1894,4],[1993,2],[2002,4],[2112,2],[2121,4],[2126,3],[2130,3]]},"76":{"position":[[150,1],[161,1],[199,1],[249,1],[306,2],[315,1],[355,2],[364,1],[378,1],[427,1],[446,1],[480,1],[558,1],[576,2],[579,2],[661,2],[670,1],[672,2],[754,1],[798,1],[842,2],[845,3],[855,1],[868,1],[870,1],[972,3],[1064,2],[1073,1],[1075,2],[1183,1],[1227,1],[1305,2],[1308,2],[1311,3],[1321,1],[1327,1],[1329,1],[1407,3],[1411,3],[1415,3]]}},"keywords":{}}],["1",{"_index":880,"title":{},"content":{"73":{"position":[[5312,2]]}},"keywords":{}}],["2",{"_index":882,"title":{},"content":{"73":{"position":[[5329,1]]}},"keywords":{}}],["20.05.2024",{"_index":529,"title":{},"content":{"42":{"position":[[555,10],[764,10]]}},"keywords":{}}],["2fa",{"_index":116,"title":{"23":{"position":[[0,3]]}},"content":{"5":{"position":[[301,3],[483,4]]},"24":{"position":[[74,4],[967,3],[1914,3],[1958,5]]}},"keywords":{}}],["abac",{"_index":25,"title":{"2":{"position":[[12,4]]},"3":{"position":[[17,5]]},"5":{"position":[[9,4]]}},"content":{"3":{"position":[[64,4],[303,5],[506,5]]},"4":{"position":[[620,4]]}},"keywords":{}}],["acceptableag",{"_index":637,"title":{},"content":{"54":{"position":[[690,15],[781,16],[987,14],[1750,15],[1872,14],[2758,16],[2890,14]]},"55":{"position":[[201,15],[353,15]]},"61":{"position":[[1035,15],[1157,14]]},"74":{"position":[[258,15],[349,16],[566,13]]}},"keywords":{}}],["access",{"_index":38,"title":{},"content":{"3":{"position":[[86,6],[121,6]]}},"keywords":{}}],["account",{"_index":426,"title":{},"content":{"31":{"position":[[437,9]]}},"keywords":{}}],["addingtoshelf",{"_index":359,"title":{},"content":{"30":{"position":[[1225,15]]},"48":{"position":[[351,15]]},"58":{"position":[[40,13],[982,15]]},"73":{"position":[[551,15],[1417,15],[4479,15]]},"75":{"position":[[96,13]]},"76":{"position":[[703,13],[800,14],[1106,13],[1229,14]]}},"keywords":{}}],["addtoshelf",{"_index":377,"title":{},"content":{"30":{"position":[[2165,10],[3116,11]]},"75":{"position":[[444,10]]}},"keywords":{}}],["admin",{"_index":144,"title":{},"content":{"15":{"position":[[1,5]]},"31":{"position":[[375,7],[1244,7]]},"66":{"position":[[96,6]]},"69":{"position":[[320,6],[408,7],[1332,7]]}},"keywords":{}}],["admin/createbook",{"_index":788,"title":{},"content":{"69":{"position":[[37,18]]}},"keywords":{}}],["admin/createbookbook/read",{"_index":755,"title":{},"content":{"66":{"position":[[28,28]]}},"keywords":{}}],["administr",{"_index":243,"title":{},"content":{"24":{"position":[[507,17]]},"36":{"position":[[277,15]]},"37":{"position":[[778,17]]},"38":{"position":[[939,15]]},"43":{"position":[[764,17]]},"45":{"position":[[453,17]]},"59":{"position":[[450,15]]}},"keywords":{}}],["administrationact",{"_index":251,"title":{},"content":{"24":{"position":[[699,23]]},"36":{"position":[[222,21]]},"43":{"position":[[956,23]]},"45":{"position":[[645,23]]},"47":{"position":[[1133,22],[1265,23],[1520,21]]},"48":{"position":[[308,23]]},"69":{"position":[[165,22],[340,21]]}},"keywords":{}}],["administrationactionsдоступ",{"_index":609,"title":{},"content":{"48":{"position":[[152,27]]}},"keywords":{}}],["administrationpolici",{"_index":481,"title":{},"content":{"37":{"position":[[865,20]]},"69":{"position":[[115,20]]}},"keywords":{}}],["administrationpolicypermiss",{"_index":473,"title":{},"content":{"36":{"position":[[311,30]]}},"keywords":{}}],["administrationpolicystor",{"_index":226,"title":{},"content":{"24":{"position":[[192,25]]},"34":{"position":[[160,26]]},"37":{"position":[[401,25]]},"38":{"position":[[712,26],[955,26]]},"43":{"position":[[487,25]]},"45":{"position":[[223,25]]},"47":{"position":[[238,25],[1222,25]]},"59":{"position":[[466,26]]}},"keywords":{}}],["adminrouteguard",{"_index":743,"title":{},"content":{"64":{"position":[[158,16]]},"66":{"position":[[250,16],[465,15]]},"69":{"position":[[810,15],[1539,15]]}},"keywords":{}}],["agepermiss",{"_index":652,"title":{},"content":{"54":{"position":[[1837,13],[2855,13]]},"61":{"position":[[1122,13]]}},"keywords":{}}],["agepermission.isallow",{"_index":654,"title":{},"content":{"54":{"position":[[1944,26],[2962,26]]},"61":{"position":[[1229,26]]}},"keywords":{}}],["allow",{"_index":264,"title":{},"content":{"24":{"position":[[1097,8]]},"30":{"position":[[1359,8],[1657,8]]},"43":{"position":[[1118,8]]},"45":{"position":[[794,8],[1207,7]]},"47":{"position":[[430,8],[648,8],[861,8],[1414,8]]},"54":{"position":[[1057,8],[2010,8],[3171,8]]},"58":{"position":[[1116,8],[1414,8]]},"61":{"position":[[1295,8]]},"73":{"position":[[685,8],[983,8],[1384,5],[1589,8],[2098,8],[4411,5],[4613,8],[4919,5],[4952,8],[4985,5]]},"74":{"position":[[180,5],[637,8]]}},"keywords":{}}],["allowadministrationrout",{"_index":593,"title":{},"content":{"47":{"position":[[496,26]]}},"keywords":{}}],["allowedcount",{"_index":881,"title":{},"content":{"73":{"position":[[5315,13]]}},"keywords":{}}],["amp;&",{"_index":583,"title":{},"content":{"45":{"position":[[2066,10]]}},"keywords":{}}],["api",{"_index":54,"title":{"44":{"position":[[0,3]]}},"content":{"3":{"position":[[339,3]]},"5":{"position":[[40,3]]}},"keywords":{}}],["apiна",{"_index":167,"title":{},"content":{"19":{"position":[[268,5]]}},"keywords":{}}],["app",{"_index":690,"title":{},"content":{"60":{"position":[[117,3]]}},"keywords":{}}],["applic",{"_index":688,"title":{},"content":{"60":{"position":[[52,11]]},"66":{"position":[[62,12]]}},"keywords":{}}],["application/app.tsx",{"_index":689,"title":{},"content":{"60":{"position":[[82,19]]}},"keywords":{}}],["application/pages/admin/createbook.tsx",{"_index":758,"title":{},"content":{"66":{"position":[[361,38]]},"69":{"position":[[1435,38]]}},"keywords":{}}],["application/pages/book/reading.tsx",{"_index":766,"title":{},"content":{"66":{"position":[[680,34]]}},"keywords":{}}],["astral/permiss",{"_index":213,"title":{"22":{"position":[[14,20]]},"37":{"position":[[33,20]]},"43":{"position":[[33,20]]}},"content":{"22":{"position":[[59,20]]},"30":{"position":[[550,19],[668,22]]},"31":{"position":[[457,19],[922,22]]},"37":{"position":[[247,19],[365,22]]},"38":{"position":[[397,19],[498,22],[562,22]]},"43":{"position":[[333,19],[451,22]]},"53":{"position":[[48,20]]},"54":{"position":[[528,19],[632,22]]},"58":{"position":[[179,19],[297,22]]},"59":{"position":[[121,19],[222,22],[286,22]]},"76":{"position":[[121,20],[256,22]]}},"keywords":{}}],["astral/vit",{"_index":127,"title":{},"content":{"7":{"position":[[27,11]]},"8":{"position":[[27,11]]},"9":{"position":[[27,11]]},"10":{"position":[[27,11]]},"11":{"position":[[27,11]]},"12":{"position":[[27,11]]},"13":{"position":[[27,11]]},"14":{"position":[[27,11]]}},"keywords":{}}],["async",{"_index":245,"title":{},"content":{"24":{"position":[[538,5]]},"30":{"position":[[1032,5]]},"37":{"position":[[899,5]]},"43":{"position":[[795,5]]},"45":{"position":[[484,5]]},"54":{"position":[[1607,5],[2506,5]]},"58":{"position":[[745,5]]},"61":{"position":[[892,5]]},"73":{"position":[[358,5],[2259,5],[2420,5],[2495,5],[2584,5],[2694,5],[2933,5],[3264,5],[3424,5],[3720,5],[4164,5],[5149,5]]}},"keywords":{}}],["attribut",{"_index":36,"title":{},"content":{"3":{"position":[[69,10]]}},"keywords":{}}],["auth",{"_index":219,"title":{"23":{"position":[[16,5]]}},"content":{},"keywords":{}}],["authstore.addprotectedhttpclients([apihttpcli",{"_index":696,"title":{},"content":{"60":{"position":[[300,51]]}},"keywords":{}}],["autobind",{"_index":238,"title":{},"content":{"24":{"position":[[434,9],[1438,9]]},"30":{"position":[[942,9],[2137,9]]},"37":{"position":[[605,9]]},"38":{"position":[[1126,9],[1923,9]]},"43":{"position":[[691,9]]},"45":{"position":[[394,9],[1702,9]]},"54":{"position":[[1515,9],[2416,9]]},"58":{"position":[[571,9]]},"59":{"position":[[637,9]]},"61":{"position":[[800,9],[1737,9]]},"73":{"position":[[268,9]]}},"keywords":{}}],["await",{"_index":248,"title":{},"content":{"24":{"position":[[576,5]]},"30":{"position":[[1049,5]]},"37":{"position":[[937,5]]},"43":{"position":[[833,5]]},"45":{"position":[[522,5]]},"54":{"position":[[1624,5],[2523,5]]},"58":{"position":[[762,5]]},"61":{"position":[[909,5]]},"73":{"position":[[375,5],[2292,5],[3582,5],[3753,5],[4197,5],[5182,5]]}},"keywords":{}}],["base",{"_index":37,"title":{},"content":{"3":{"position":[[80,5],[115,5]]}},"keywords":{}}],["billinginfo",{"_index":360,"title":{},"content":{"30":{"position":[[1376,11]]},"54":{"position":[[3034,11]]},"58":{"position":[[1133,11]]},"73":{"position":[[702,11],[1606,11],[2951,12],[2987,13],[4227,12],[4630,11],[5212,12]]}},"keywords":{}}],["billinginfo.info.shelf.allowedcount",{"_index":365,"title":{},"content":{"30":{"position":[[1561,35]]},"58":{"position":[[1318,35]]},"73":{"position":[[887,35],[1904,35],[4815,35]]}},"keywords":{}}],["billinginfo.info.shelf.currentcount",{"_index":364,"title":{},"content":{"30":{"position":[[1519,35]]},"58":{"position":[[1276,35]]},"73":{"position":[[845,35],[1862,35],[4773,35]]}},"keywords":{}}],["billinginfo?.paid",{"_index":362,"title":{},"content":{"30":{"position":[[1439,20]]},"54":{"position":[[3096,20]]},"58":{"position":[[1196,20]]},"73":{"position":[[765,20],[1719,20],[4693,20]]}},"keywords":{}}],["billingrepo",{"_index":351,"title":{},"content":{"30":{"position":[[832,12]]},"38":{"position":[[1438,12]]},"54":{"position":[[2306,12]]},"58":{"position":[[461,12]]},"59":{"position":[[949,12]]},"73":{"position":[[158,12]]}},"keywords":{}}],["billingrepomock",{"_index":863,"title":{},"content":{"73":{"position":[[3306,15],[3548,16]]}},"keywords":{}}],["billingrepositori",{"_index":352,"title":{},"content":{"30":{"position":[[845,18]]},"38":{"position":[[248,18],[320,18],[1048,18],[1744,18]]},"54":{"position":[[2319,18]]},"58":{"position":[[91,18],[474,18]]},"59":{"position":[[559,18]]},"73":{"position":[[171,18]]}},"keywords":{}}],["billingrepositoryfaker.makebillingdetail",{"_index":877,"title":{},"content":{"73":{"position":[[5245,43]]}},"keywords":{}}],["billingrepositoryfaker.makebillinginfo(billinginfo",{"_index":867,"title":{},"content":{"73":{"position":[[3439,52]]}},"keywords":{}}],["boilerplate/blob/main/application/app.tsx#l44",{"_index":140,"title":{},"content":{"13":{"position":[[39,45]]}},"keywords":{}}],["boilerplate/blob/main/modules/books/features/booklist/uistore/uistore.ts#l76",{"_index":137,"title":{},"content":{"12":{"position":[[39,76]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/enums.t",{"_index":132,"title":{},"content":{"9":{"position":[[39,57]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystore/paymentpolicystore.ts#l33",{"_index":135,"title":{},"content":{"11":{"position":[[39,126]]}},"keywords":{}}],["boilerplate/tree/main/modules/permiss",{"_index":128,"title":{},"content":{"7":{"position":[[39,41]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/polici",{"_index":130,"title":{},"content":{"8":{"position":[[39,81]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/rul",{"_index":134,"title":{},"content":{"10":{"position":[[39,78]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/features/routeguard",{"_index":143,"title":{},"content":{"14":{"position":[[39,62]]}},"keywords":{}}],["book",{"_index":354,"title":{},"content":{"30":{"position":[[1010,8]]},"36":{"position":[[387,6]]},"38":{"position":[[998,6]]},"54":{"position":[[2484,8]]},"58":{"position":[[639,8]]},"59":{"position":[[509,6]]},"66":{"position":[[136,5]]},"73":{"position":[[336,8]]},"76":{"position":[[791,6],[1220,6]]}},"keywords":{}}],["bookbyidqueri",{"_index":724,"title":{},"content":{"61":{"position":[[1770,15]]}},"keywords":{}}],["bookcard",{"_index":398,"title":{},"content":{"30":{"position":[[3063,8]]}},"keywords":{}}],["bookid",{"_index":375,"title":{},"content":{"30":{"position":[[1998,7],[2902,8]]},"49":{"position":[[102,8],[172,8]]},"61":{"position":[[1554,7],[2018,9]]},"75":{"position":[[457,8],[654,9]]}},"keywords":{}}],["bookspolici",{"_index":475,"title":{},"content":{"36":{"position":[[412,11]]},"58":{"position":[[3,11]]}},"keywords":{}}],["bookspolicystor",{"_index":349,"title":{},"content":{"30":{"position":[[704,16]]},"34":{"position":[[201,17]]},"38":{"position":[[739,17],[1005,17]]},"54":{"position":[[1099,16],[2167,16]]},"58":{"position":[[333,16]]},"59":{"position":[[516,17]]},"73":{"position":[[30,16],[3515,17]]}},"keywords":{}}],["booksrepo",{"_index":722,"title":{},"content":{"61":{"position":[[1675,10]]}},"keywords":{}}],["booksrepositori",{"_index":723,"title":{},"content":{"61":{"position":[[1686,15]]}},"keywords":{}}],["boolean",{"_index":549,"title":{},"content":{"44":{"position":[[74,8],[229,8]]},"73":{"position":[[2978,8]]}},"keywords":{}}],["buy",{"_index":726,"title":{},"content":{"61":{"position":[[1850,3]]}},"keywords":{}}],["cacheservic",{"_index":857,"title":{},"content":{"73":{"position":[[3117,12]]}},"keywords":{}}],["cacheservice.createquery(['bil",{"_index":866,"title":{},"content":{"73":{"position":[[3386,37]]}},"keywords":{}}],["cacheservice.createquery(['rol",{"_index":862,"title":{},"content":{"73":{"position":[[3228,35]]}},"keywords":{}}],["calc",{"_index":620,"title":{},"content":{"49":{"position":[[61,5]]},"55":{"position":[[25,5]]}},"keywords":{}}],["calcacceptableag",{"_index":623,"title":{},"content":{"51":{"position":[[175,18]]},"54":{"position":[[429,18],[668,17],[1127,17],[1260,17],[1853,18],[2114,17],[2871,18]]},"55":{"position":[[181,17]]},"61":{"position":[[545,17],[1138,18]]},"74":{"position":[[236,17],[801,20]]}},"keywords":{}}],["calcaccountpay",{"_index":624,"title":{},"content":{"51":{"position":[[208,19]]}},"keywords":{}}],["calcadminpermiss",{"_index":663,"title":{},"content":{"55":{"position":[[84,20]]}},"keywords":{}}],["calcpay",{"_index":635,"title":{},"content":{"54":{"position":[[300,12],[1736,11]]},"61":{"position":[[1021,11]]}},"keywords":{}}],["calcreadingbook",{"_index":621,"title":{},"content":{"49":{"position":[[84,15]]},"54":{"position":[[282,15]]}},"keywords":{}}],["calcreadingonlin",{"_index":658,"title":{},"content":{"54":{"position":[[2738,17]]}},"keywords":{}}],["canreadingbook",{"_index":616,"title":{},"content":{"48":{"position":[[476,16]]}},"keywords":{}}],["case",{"_index":455,"title":{},"content":{"32":{"position":[[149,4]]}},"keywords":{}}],["checkacceptableag",{"_index":665,"title":{},"content":{"55":{"position":[[332,18]]}},"keywords":{}}],["checkadminrol",{"_index":664,"title":{},"content":{"55":{"position":[[281,14]]}},"keywords":{}}],["checkreadingbook",{"_index":622,"title":{},"content":{"49":{"position":[[153,16]]}},"keywords":{}}],["children",{"_index":799,"title":{},"content":{"69":{"position":[[773,9],[840,8],[1085,9],[1196,10]]},"71":{"position":[[318,9],[367,9],[478,9],[541,9]]}},"keywords":{}}],["class",{"_index":225,"title":{},"content":{"24":{"position":[[186,5],[1215,5]]},"30":{"position":[[698,5],[1919,5]]},"37":{"position":[[395,5]]},"38":{"position":[[846,5],[1814,5]]},"43":{"position":[[481,5]]},"45":{"position":[[217,5],[1593,5]]},"47":{"position":[[232,5],[1216,5]]},"54":{"position":[[1307,5],[2161,5]]},"58":{"position":[[327,5]]},"59":{"position":[[357,5]]},"61":{"position":[[592,5],[1475,5]]},"73":{"position":[[24,5]]},"75":{"position":[[251,5]]}},"keywords":{}}],["closepayaccount",{"_index":390,"title":{},"content":{"30":{"position":[[2808,15],[3146,15]]},"61":{"position":[[2340,15]]}},"keywords":{}}],["closepaymentaccount",{"_index":910,"title":{},"content":{"75":{"position":[[1517,19]]}},"keywords":{}}],["const",{"_index":272,"title":{},"content":{"24":{"position":[[1495,5]]},"30":{"position":[[1370,5],[2880,5],[3057,5],[3107,5]]},"38":{"position":[[1697,5]]},"45":{"position":[[1056,5],[1901,5],[1937,5]]},"54":{"position":[[662,5],[1831,5],[2849,5],[3028,5]]},"55":{"position":[[78,5],[175,5],[275,5],[326,5]]},"58":{"position":[[1127,5]]},"60":{"position":[[111,5],[143,5],[183,5]]},"61":{"position":[[1116,5],[1867,5]]},"66":{"position":[[520,5],[907,5],[942,5]]},"69":{"position":[[804,5],[1594,5]]},"71":{"position":[[425,5]]},"73":{"position":[[696,5],[1600,5],[2276,5],[2919,5],[3061,5],[3111,5],[3154,5],[3300,5],[3499,5],[3737,5],[4181,5],[4624,5],[5166,5]]},"74":{"position":[[230,5],[782,5]]},"76":{"position":[[366,5],[429,5],[470,5],[727,5],[849,5],[1156,5],[1315,5]]}},"keywords":{}}],["constructor",{"_index":230,"title":{},"content":{"24":{"position":[[253,12],[1231,12]]},"30":{"position":[[767,12],[1968,12]]},"37":{"position":[[462,12]]},"43":{"position":[[548,12]]},"45":{"position":[[251,12]]},"54":{"position":[[1378,12],[2230,12]]},"58":{"position":[[396,12]]},"61":{"position":[[663,12],[1524,12]]},"73":{"position":[[93,12]]},"75":{"position":[[304,12]]}},"keywords":{}}],["constructor(billingrepo",{"_index":491,"title":{},"content":{"38":{"position":[[1023,24]]},"59":{"position":[[534,24]]}},"keywords":{}}],["constructor(priv",{"_index":501,"title":{},"content":{"38":{"position":[[1830,19]]},"45":{"position":[[1609,19]]}},"keywords":{}}],["content",{"_index":807,"title":{},"content":{"69":{"position":[[1074,10]]}},"keywords":{}}],["contentstateнеобходим",{"_index":684,"title":{},"content":{"59":{"position":[[1794,22]]}},"keywords":{}}],["control",{"_index":39,"title":{},"content":{"3":{"position":[[93,8],[128,9]]}},"keywords":{}}],["createadministrationpolicystor",{"_index":488,"title":{},"content":{"38":{"position":[[594,32],[1315,32]]},"59":{"position":[[826,32]]}},"keywords":{}}],["createallowedpermiss",{"_index":922,"title":{},"content":{"76":{"position":[[201,24],[815,26]]}},"keywords":{}}],["createbook.tsx",{"_index":756,"title":{},"content":{"66":{"position":[[113,14]]}},"keywords":{}}],["createbookpag",{"_index":761,"title":{},"content":{"66":{"position":[[526,14],[662,15]]},"69":{"position":[[1600,14],[1736,15]]}},"keywords":{}}],["createbookspolicystor",{"_index":489,"title":{},"content":{"38":{"position":[[627,23],[1394,23]]},"59":{"position":[[905,23]]}},"keywords":{}}],["createcacheservic",{"_index":858,"title":{},"content":{"73":{"position":[[3132,21]]}},"keywords":{}}],["createdenialpermiss",{"_index":921,"title":{},"content":{"76":{"position":[[95,22],[226,22],[1244,23]]}},"keywords":{}}],["createpaymentpolicystor",{"_index":490,"title":{},"content":{"38":{"position":[[651,25]]}},"keywords":{}}],["createpermiss",{"_index":545,"title":{},"content":{"44":{"position":[[1,16]]}},"keywords":{}}],["createpolicymanagerstor",{"_index":487,"title":{},"content":{"38":{"position":[[530,24],[1265,27]]},"59":{"position":[[254,24],[776,27]]},"73":{"position":[[3083,27]]}},"keywords":{}}],["createrul",{"_index":629,"title":{},"content":{"53":{"position":[[27,10]]},"54":{"position":[[614,10]]}},"keywords":{}}],["createrule((allow",{"_index":640,"title":{},"content":{"54":{"position":[[745,18]]},"74":{"position":[[313,18]]}},"keywords":{}}],["createuistor",{"_index":391,"title":{},"content":{"30":{"position":[[2886,13]]}},"keywords":{}}],["createuistore(id",{"_index":401,"title":{},"content":{"30":{"position":[[3185,19]]}},"keywords":{}}],["creationbookscreen",{"_index":759,"title":{},"content":{"66":{"position":[[410,18]]},"69":{"position":[[1484,18]]}},"keywords":{}}],["currentcount",{"_index":879,"title":{},"content":{"73":{"position":[[5298,13]]}},"keywords":{}}],["data",{"_index":438,"title":{},"content":{"31":{"position":[[769,6]]}},"keywords":{}}],["date",{"_index":645,"title":{},"content":{"54":{"position":[[974,7]]},"74":{"position":[[552,8]]}},"keywords":{}}],["date(userbirthday",{"_index":644,"title":{},"content":{"54":{"position":[[950,19]]},"74":{"position":[[528,19]]}},"keywords":{}}],["default",{"_index":765,"title":{},"content":{"66":{"position":[[654,7],[1184,7]]},"69":{"position":[[1728,7]]}},"keywords":{}}],["deletingorgan",{"_index":324,"title":{},"content":{"28":{"position":[[403,21],[638,21]]}},"keywords":{}}],["deni",{"_index":254,"title":{},"content":{"24":{"position":[[769,5]]},"30":{"position":[[1287,5]]},"43":{"position":[[1026,5]]},"45":{"position":[[722,5]]},"47":{"position":[[358,5],[576,5],[789,5],[1342,5]]},"54":{"position":[[764,5],[1817,5],[2835,5]]},"58":{"position":[[1044,5]]},"61":{"position":[[1102,5]]},"73":{"position":[[613,5],[1392,4],[1479,5],[4421,4],[4541,5],[4995,4]]},"74":{"position":[[190,4],[332,5]]}},"keywords":{}}],["denialmissingdatapermiss",{"_index":738,"title":{},"content":{"62":{"position":[[151,27]]}},"keywords":{}}],["denialswitch",{"_index":801,"title":{},"content":{"69":{"position":[[963,15],[1241,12]]},"71":{"position":[[271,13],[464,13]]}},"keywords":{}}],["denialswitch[permission.reason",{"_index":819,"title":{},"content":{"71":{"position":[[556,33],[599,32]]}},"keywords":{}}],["deny(agepermission.reason",{"_index":655,"title":{},"content":{"54":{"position":[[1980,27],[2998,27]]},"61":{"position":[[1265,27]]}},"keywords":{}}],["deny(permissiondenialreason.exceedshelfcount",{"_index":366,"title":{},"content":{"30":{"position":[[1608,46]]},"58":{"position":[[1365,46]]},"73":{"position":[[934,46],[1951,46],[4862,46]]}},"keywords":{}}],["deny(permissiondenialreason.missingdata",{"_index":641,"title":{},"content":{"54":{"position":[[807,41]]},"74":{"position":[[375,41]]}},"keywords":{}}],["deny(permissiondenialreason.missinguserag",{"_index":642,"title":{},"content":{"54":{"position":[[879,44]]},"74":{"position":[[447,44]]}},"keywords":{}}],["deny(permissiondenialreason.noadmin",{"_index":265,"title":{},"content":{"24":{"position":[[1108,37]]},"43":{"position":[[1171,37]]},"45":{"position":[[805,37]]},"47":{"position":[[441,37],[659,37],[872,37],[1425,37]]}},"keywords":{}}],["deny(permissiondenialreason.nopayaccount",{"_index":363,"title":{},"content":{"30":{"position":[[1469,42]]},"54":{"position":[[3126,42]]},"58":{"position":[[1226,42]]},"73":{"position":[[795,42],[1749,42],[4723,42]]}},"keywords":{}}],["deny(permissiondenialreason.notforyourag",{"_index":647,"title":{},"content":{"54":{"position":[[1011,43]]},"74":{"position":[[591,43]]}},"keywords":{}}],["deny(permissiondenialreason.twofa",{"_index":262,"title":{},"content":{"24":{"position":[[1001,35]]}},"keywords":{}}],["describ",{"_index":837,"title":{},"content":{"73":{"position":[[1127,9]]}},"keywords":{}}],["describe('administrationpolicystor",{"_index":838,"title":{},"content":{"73":{"position":[[1138,37]]}},"keywords":{}}],["describe('bookspolicystor",{"_index":845,"title":{},"content":{"73":{"position":[[2140,28],[2879,28]]}},"keywords":{}}],["describe('calcacceptableag",{"_index":890,"title":{},"content":{"74":{"position":[[652,29]]}},"keywords":{}}],["describe('goodsliststor",{"_index":911,"title":{},"content":{"75":{"position":[[1617,26]]},"76":{"position":[[279,26]]}},"keywords":{}}],["describe('добавлен",{"_index":839,"title":{},"content":{"73":{"position":[[1187,20],[2180,20],[3641,20]]},"75":{"position":[[1655,20]]},"76":{"position":[[317,20]]}},"keywords":{}}],["describe('доступ",{"_index":891,"title":{},"content":{"74":{"position":[[693,17]]}},"keywords":{}}],["doc",{"_index":320,"title":{},"content":{"28":{"position":[[246,4],[462,4],[689,4],[718,4]]}},"keywords":{}}],["docact",{"_index":104,"title":{},"content":{"4":{"position":[[638,11]]},"5":{"position":[[45,10],[219,10],[447,11]]},"28":{"position":[[268,11],[625,10]]}},"keywords":{}}],["domain",{"_index":797,"title":{},"content":{"69":{"position":[[682,18]]},"71":{"position":[[80,15],[135,15]]}},"keywords":{}}],["dx",{"_index":198,"title":{},"content":{"21":{"position":[[122,2]]},"38":{"position":[[2204,2]]}},"keywords":{}}],["enum",{"_index":414,"title":{"31":{"position":[[29,5]]}},"content":{"31":{"position":[[124,4],[291,4],[580,4],[952,4]]},"37":{"position":[[223,20]]},"43":{"position":[[309,20]]}},"keywords":{}}],["enums.t",{"_index":464,"title":{},"content":{"34":{"position":[[333,8]]},"51":{"position":[[308,8]]}},"keywords":{}}],["error",{"_index":434,"title":{},"content":{"31":{"position":[[681,7]]}},"keywords":{}}],["errorlist",{"_index":704,"title":{},"content":{"60":{"position":[[544,10]]}},"keywords":{}}],["errorst",{"_index":703,"title":{},"content":{"60":{"position":[[530,13]]}},"keywords":{}}],["exampl",{"_index":550,"title":{},"content":{"44":{"position":[[140,8]]}},"keywords":{}}],["example/data",{"_index":478,"title":{},"content":{"37":{"position":[[167,16]]},"38":{"position":[[289,16],[361,16]]},"43":{"position":[[253,16]]}},"keywords":{}}],["example/modules/permiss",{"_index":372,"title":{},"content":{"30":{"position":[[1880,31]]},"45":{"position":[[1017,31]]},"66":{"position":[[488,31],[875,31]]},"69":{"position":[[1562,31]]}},"keywords":{}}],["example/screen",{"_index":760,"title":{},"content":{"66":{"position":[[436,19],[766,19]]},"69":{"position":[[1510,19]]}},"keywords":{}}],["example/shar",{"_index":770,"title":{},"content":{"66":{"position":[[818,18]]},"69":{"position":[[606,18]]},"71":{"position":[[29,18]]}},"keywords":{}}],["expect(notifymock.info).tobecalledwith('книг",{"_index":930,"title":{},"content":{"76":{"position":[[901,45]]}},"keywords":{}}],["expect(permission.isallowed).tobefalsi",{"_index":893,"title":{},"content":{"74":{"position":[[822,41]]}},"keywords":{}}],["expect(permission.reason).tobe(permissiondenialreason.missingdata",{"_index":894,"title":{},"content":{"74":{"position":[[864,67]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobefalsi",{"_index":872,"title":{},"content":{"73":{"position":[[4261,48]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobetruthi",{"_index":850,"title":{},"content":{"73":{"position":[[2324,49],[3785,49],[5345,49]]}},"keywords":{}}],["expect(sut.addingtoshelf.reason).tob",{"_index":873,"title":{},"content":{"73":{"position":[[4310,38]]}},"keywords":{}}],["expect(sut.isopenaccountpayment).tobetruthi",{"_index":931,"title":{},"content":{"76":{"position":[[1360,46]]}},"keywords":{}}],["export",{"_index":224,"title":{},"content":{"24":{"position":[[179,6],[1208,6]]},"30":{"position":[[691,6],[1912,6],[2873,6],[3050,6]]},"31":{"position":[[284,6],[573,6],[945,6]]},"37":{"position":[[388,6]]},"38":{"position":[[839,6],[1690,6],[1807,6]]},"43":{"position":[[474,6]]},"45":{"position":[[1049,6],[1586,6],[1894,6]]},"54":{"position":[[655,6],[1300,6],[2154,6]]},"58":{"position":[[320,6]]},"59":{"position":[[350,6]]},"60":{"position":[[104,6]]},"61":{"position":[[585,6],[1468,6]]},"66":{"position":[[647,6],[1177,6]]},"69":{"position":[[797,6],[1721,6]]},"71":{"position":[[418,6]]},"73":{"position":[[17,6]]},"74":{"position":[[223,6]]},"75":{"position":[[244,6]]}},"keywords":{}}],["extend",{"_index":920,"title":{},"content":{"76":{"position":[[84,8],[181,10]]}},"keywords":{}}],["extern",{"_index":369,"title":{},"content":{"30":{"position":[[1790,8]]}},"keywords":{}}],["factor",{"_index":218,"title":{"23":{"position":[[9,6]]}},"content":{},"keywords":{}}],["fals",{"_index":374,"title":{},"content":{"30":{"position":[[1961,6],[2861,6]]},"61":{"position":[[1517,6],[2393,6]]},"62":{"position":[[194,6]]},"73":{"position":[[4220,6],[4248,5],[5205,6]]},"75":{"position":[[297,6],[1578,6]]}},"keywords":{}}],["featur",{"_index":148,"title":{"16":{"position":[[0,7]]},"17":{"position":[[31,7]]}},"content":{"17":{"position":[[32,7],[73,7],[145,7]]},"24":{"position":[[873,8]]},"41":{"position":[[284,7]]},"42":{"position":[[589,7]]},"45":{"position":[[855,8]]},"47":{"position":[[1490,8]]},"62":{"position":[[41,9]]},"64":{"position":[[112,9]]},"66":{"position":[[204,9]]}},"keywords":{}}],["featuretoggl",{"_index":210,"title":{},"content":{"21":{"position":[[353,13]]}},"keywords":{}}],["frontend",{"_index":21,"title":{},"content":{"1":{"position":[[108,8]]}},"keywords":{}}],["frontend'е",{"_index":41,"title":{},"content":{"3":{"position":[[142,10]]}},"keywords":{}}],["frontend.shar",{"_index":10,"title":{},"content":{"0":{"position":[[97,16]]}},"keywords":{}}],["getbillinginfoqueri",{"_index":865,"title":{},"content":{"73":{"position":[[3356,20]]}},"keywords":{}}],["getdateyeardiff(new",{"_index":643,"title":{},"content":{"54":{"position":[[929,20]]}},"keywords":{}}],["getrolesqueri",{"_index":861,"title":{},"content":{"73":{"position":[[3204,14]]}},"keywords":{}}],["github",{"_index":12,"title":{},"content":{"0":{"position":[[131,7]]}},"keywords":{}}],["gt",{"_index":247,"title":{},"content":{"24":{"position":[[568,5],[775,5],[1487,5]]},"30":{"position":[[1041,5],[1293,5],[1555,5],[2181,5],[2760,5],[2829,5],[2919,5],[3099,5],[3179,5],[3254,5],[3419,5]]},"37":{"position":[[929,5]]},"38":{"position":[[1547,5]]},"43":{"position":[[825,5],[1032,5]]},"44":{"position":[[223,5]]},"45":{"position":[[514,5],[728,5],[1084,5],[1315,5],[1929,5]]},"47":{"position":[[364,5],[582,5],[795,5],[1348,5]]},"49":{"position":[[119,5],[189,5]]},"54":{"position":[[739,5],[770,5],[1616,5],[1774,5],[1823,5],[2515,5],[2783,5],[2841,5]]},"55":{"position":[[122,5],[249,5],[313,5],[401,5]]},"58":{"position":[[754,5],[1050,5],[1312,5]]},"59":{"position":[[1058,5]]},"60":{"position":[[135,5],[260,5],[431,5],[624,4]]},"61":{"position":[[901,5],[1059,5],[1108,5],[1859,5],[2292,5],[2361,5]]},"66":{"position":[[546,5],[610,5],[934,5],[1048,6],[1134,5]]},"69":{"position":[[859,5],[1167,5],[1179,5],[1191,4],[1620,5],[1684,5]]},"71":{"position":[[498,5],[768,6],[925,6],[987,6]]},"73":{"position":[[367,5],[619,5],[881,5],[1179,5],[1228,5],[1485,5],[1898,5],[2172,5],[2221,5],[2268,5],[2429,5],[2504,5],[2593,5],[2703,5],[2911,5],[3053,5],[3222,5],[3273,5],[3380,5],[3433,5],[3682,5],[3729,5],[4173,5],[4547,5],[4809,5],[5158,5]]},"74":{"position":[[307,5],[338,5],[685,5],[720,5],[774,5],[992,5],[1067,5],[1199,5]]},"75":{"position":[[474,5],[1465,5],[1542,5],[1647,5],[1696,5],[1786,5],[1888,5],[1996,5],[2115,5]]},"76":{"position":[[309,5],[358,5],[421,5],[664,5],[1067,5]]}},"keywords":{}}],["guard",{"_index":142,"title":{"14":{"position":[[6,7]]},"15":{"position":[[20,7]]},"63":{"position":[[6,7]]},"65":{"position":[[0,5]]},"68":{"position":[[15,6]]}},"content":{"64":{"position":[[11,6]]},"65":{"position":[[7,5],[109,5]]},"67":{"position":[[21,5],[131,6]]},"68":{"position":[[69,6],[182,5],[313,6]]},"69":{"position":[[416,6]]}},"keywords":{}}],["hasreason",{"_index":552,"title":{},"content":{"44":{"position":[[195,10]]}},"keywords":{}}],["header",{"_index":804,"title":{},"content":{"69":{"position":[[1030,9]]}},"keywords":{}}],["https://github.com/kaluga",{"_index":126,"title":{},"content":{"7":{"position":[[1,25]]},"8":{"position":[[1,25]]},"9":{"position":[[1,25]]},"10":{"position":[[1,25]]},"11":{"position":[[1,25]]},"12":{"position":[[1,25]]},"13":{"position":[[1,25]]},"14":{"position":[[1,25]]}},"keywords":{}}],["id",{"_index":397,"title":{},"content":{"30":{"position":[[3035,3],[3086,2]]},"66":{"position":[[950,2],[979,5]]},"76":{"position":[[947,2]]}},"keywords":{}}],["id={id",{"_index":778,"title":{},"content":{"66":{"position":[[1126,7]]}},"keywords":{}}],["id={id}>",{"_index":776,"title":{},"content":{"66":{"position":[[1092,11]]}},"keywords":{}}],["import",{"_index":348,"title":{},"content":{"30":{"position":[[625,6],[1804,6]]},"31":{"position":[[887,6]]},"37":{"position":[[88,6],[131,6],[184,6],[322,6]]},"38":{"position":[[196,6],[239,6],[306,6],[458,6],[521,6],[585,6],[698,6]]},"43":{"position":[[174,6],[217,6],[270,6],[408,6]]},"45":{"position":[[940,6],[984,6]]},"54":{"position":[[605,6],[1251,6],[2105,6]]},"58":{"position":[[254,6]]},"59":{"position":[[182,6],[245,6]]},"61":{"position":[[536,6]]},"66":{"position":[[401,6],[456,6],[716,6],[786,6],[837,6]]},"69":{"position":[[482,6],[522,6],[566,6],[625,6],[701,6],[1475,6],[1530,6]]},"71":{"position":[[1,6],[48,6],[96,6]]},"76":{"position":[[143,6],[192,6]]}},"keywords":{}}],["index.t",{"_index":462,"title":{},"content":{"34":{"position":[[267,8],[316,8],[350,8]]},"51":{"position":[[242,8],[291,8],[325,8]]},"64":{"position":[[222,8],[241,8],[258,8]]},"66":{"position":[[314,8],[333,8],[350,8]]}},"keywords":{}}],["info",{"_index":876,"title":{},"content":{"73":{"position":[[5239,5]]}},"keywords":{}}],["intern",{"_index":433,"title":{},"content":{"31":{"position":[[671,9]]}},"keywords":{}}],["internalerror",{"_index":432,"title":{},"content":{"31":{"position":[[655,13],[1032,13]]}},"keywords":{}}],["intro",{"_index":13,"title":{"1":{"position":[[0,5]]},"18":{"position":[[0,5]]}},"content":{"1":{"position":[[0,5]]}},"keywords":{}}],["invalid",{"_index":615,"title":{},"content":{"48":{"position":[[456,7]]},"49":{"position":[[137,7]]},"55":{"position":[[266,7]]}},"keywords":{}}],["isaddtoshelf",{"_index":617,"title":{},"content":{"48":{"position":[[512,14]]}},"keywords":{}}],["isadmin",{"_index":849,"title":{},"content":{"73":{"position":[[2306,8],[2942,8],[2969,8],[3282,8],[3767,8],[4211,8],[5196,8]]}},"keywords":{}}],["isallow",{"_index":548,"title":{},"content":{"44":{"position":[[63,10]]},"62":{"position":[[183,10]]}},"keywords":{}}],["isallowedbookcr",{"_index":502,"title":{},"content":{"38":{"position":[[1955,23]]},"45":{"position":[[1734,23],[1946,21],[2043,22]]}},"keywords":{}}],["iserror={permissionsstatus.iserror",{"_index":701,"title":{},"content":{"60":{"position":[[454,35]]}},"keywords":{}}],["isloading={permissionsstatus.isload",{"_index":702,"title":{},"content":{"60":{"position":[[490,39]]}},"keywords":{}}],["isopen={isopenpayaccount",{"_index":410,"title":{},"content":{"30":{"position":[[3367,25]]}},"keywords":{}}],["isopenaccountpay",{"_index":899,"title":{},"content":{"75":{"position":[[274,20]]}},"keywords":{}}],["isopenpayaccount",{"_index":373,"title":{},"content":{"30":{"position":[[1942,16],[3128,17]]},"61":{"position":[[1498,16]]}},"keywords":{}}],["issu",{"_index":0,"title":{"0":{"position":[[0,6]]}},"content":{"0":{"position":[[0,6]]}},"keywords":{}}],["it('доступ",{"_index":895,"title":{},"content":{"74":{"position":[[1082,10]]}},"keywords":{}}],["it('доступн",{"_index":846,"title":{},"content":{"73":{"position":[[2229,12],[2604,13],[3690,12],[5059,13]]}},"keywords":{}}],["it('есл",{"_index":892,"title":{},"content":{"74":{"position":[[728,8],[936,8],[1003,8]]}},"keywords":{}}],["it('недоступн",{"_index":851,"title":{},"content":{"73":{"position":[[2378,15],[2440,15],[2515,15],[4122,15]]}},"keywords":{}}],["it('открыва",{"_index":913,"title":{},"content":{"75":{"position":[[1797,13]]},"76":{"position":[[976,13]]}},"keywords":{}}],["it('показыва",{"_index":912,"title":{},"content":{"75":{"position":[[1704,14],[1899,14],[2007,14]]},"76":{"position":[[582,14]]}},"keywords":{}}],["jsdoc",{"_index":450,"title":{},"content":{"32":{"position":[[60,5]]}},"keywords":{}}],["kebab",{"_index":454,"title":{},"content":{"32":{"position":[[143,5]]}},"keywords":{}}],["lite",{"_index":564,"title":{},"content":{"45":{"position":[[977,6]]},"69":{"position":[[559,6]]}},"keywords":{}}],["lt",{"_index":646,"title":{},"content":{"54":{"position":[[982,4]]},"74":{"position":[[561,4]]}},"keywords":{}}],["lt;>",{"_index":402,"title":{},"content":{"30":{"position":[[3214,8]]}},"keywords":{}}],["lt;/>",{"_index":412,"title":{},"content":{"30":{"position":[[3425,9]]}},"keywords":{}}],["lt;/adminrouteguard>",{"_index":764,"title":{},"content":{"66":{"position":[[616,24]]},"69":{"position":[[1690,24]]}},"keywords":{}}],["lt;/container>",{"_index":408,"title":{},"content":{"30":{"position":[[3328,18]]}},"keywords":{}}],["lt;/contentstate>",{"_index":708,"title":{},"content":{"60":{"position":[[681,21]]}},"keywords":{}}],["lt;/permissionguard>",{"_index":811,"title":{},"content":{"69":{"position":[[1207,24]]}},"keywords":{}}],["lt;/readingbookrouteguard>",{"_index":779,"title":{},"content":{"66":{"position":[[1140,30]]}},"keywords":{}}],["lt;/routerlink>",{"_index":570,"title":{},"content":{"45":{"position":[[1293,19],[2157,19]]}},"keywords":{}}],["lt;/sidebar>",{"_index":571,"title":{},"content":{"45":{"position":[[1321,16],[2201,16]]}},"keywords":{}}],["lt;/sidebaritem>",{"_index":584,"title":{},"content":{"45":{"position":[[2180,20]]}},"keywords":{}}],["lt;/themeprovider>",{"_index":709,"title":{},"content":{"60":{"position":[[703,22]]}},"keywords":{}}],["lt;adminrouteguard>",{"_index":762,"title":{},"content":{"66":{"position":[[563,23]]},"69":{"position":[[1637,23]]}},"keywords":{}}],["lt;bookinfo",{"_index":404,"title":{},"content":{"30":{"position":[[3241,12]]}},"keywords":{}}],["lt;button",{"_index":405,"title":{},"content":{"30":{"position":[[3260,10]]}},"keywords":{}}],["lt;container>",{"_index":403,"title":{},"content":{"30":{"position":[[3223,17]]}},"keywords":{}}],["lt;contentst",{"_index":700,"title":{},"content":{"60":{"position":[[437,16]]}},"keywords":{}}],["lt;creationbookscreen",{"_index":763,"title":{},"content":{"66":{"position":[[587,22]]},"69":{"position":[[1661,22]]}},"keywords":{}}],["lt;mainlayout>{renderroutes}</mainlayout>",{"_index":707,"title":{},"content":{"60":{"position":[[629,51]]}},"keywords":{}}],["lt;notfoundscreen",{"_index":772,"title":{},"content":{"66":{"position":[[994,18]]}},"keywords":{}}],["lt;notificationcontain",{"_index":699,"title":{},"content":{"60":{"position":[[405,25]]}},"keywords":{}}],["lt;pagelayout",{"_index":803,"title":{},"content":{"69":{"position":[[1015,14]]}},"keywords":{}}],["lt;payaccountmod",{"_index":409,"title":{},"content":{"30":{"position":[[3347,19]]}},"keywords":{}}],["lt;permissionguard",{"_index":800,"title":{},"content":{"69":{"position":[[876,19]]}},"keywords":{}}],["lt;permissionsgateway",{"_index":566,"title":{},"content":{"45":{"position":[[1117,22]]}},"keywords":{}}],["lt;placehold",{"_index":808,"title":{},"content":{"69":{"position":[[1097,15]]},"71":{"position":[[706,15],[851,15],[941,15]]}},"keywords":{}}],["lt;readingbookrouteguard",{"_index":775,"title":{},"content":{"66":{"position":[[1066,25]]}},"keywords":{}}],["lt;readingbookscreen",{"_index":777,"title":{},"content":{"66":{"position":[[1104,21]]}},"keywords":{}}],["lt;routerlink",{"_index":568,"title":{},"content":{"45":{"position":[[1215,14],[2079,14]]}},"keywords":{}}],["lt;sidebar>",{"_index":565,"title":{},"content":{"45":{"position":[[1101,15],[2007,15]]}},"keywords":{}}],["lt;sidebaritem>",{"_index":582,"title":{},"content":{"45":{"position":[[2023,19]]}},"keywords":{}}],["lt;themeprovid",{"_index":697,"title":{},"content":{"60":{"position":[[369,17]]}},"keywords":{}}],["makeautoobserv",{"_index":476,"title":{},"content":{"37":{"position":[[97,18]]},"38":{"position":[[205,18]]},"43":{"position":[[183,18]]}},"keywords":{}}],["makeautoobservable(thi",{"_index":237,"title":{},"content":{"24":{"position":[[403,24],[1407,24]]},"30":{"position":[[911,24],[2106,24]]},"37":{"position":[[574,24]]},"38":{"position":[[1095,24],[1892,24]]},"43":{"position":[[660,24]]},"45":{"position":[[363,24],[1671,24]]},"54":{"position":[[1484,24],[2385,24]]},"58":{"position":[[540,24]]},"59":{"position":[[606,24]]},"61":{"position":[[769,24],[1706,24]]},"73":{"position":[[237,24]]},"75":{"position":[[409,25]]}},"keywords":{}}],["math.abs(getdateyeardiff(new",{"_index":889,"title":{},"content":{"74":{"position":[[499,28]]}},"keywords":{}}],["miss",{"_index":437,"title":{},"content":{"31":{"position":[[760,8]]}},"keywords":{}}],["missingdata",{"_index":436,"title":{},"content":{"31":{"position":[[746,11],[1139,11]]}},"keywords":{}}],["mobx",{"_index":477,"title":{},"content":{"37":{"position":[[123,7]]},"38":{"position":[[231,7]]},"43":{"position":[[209,7]]},"45":{"position":[[965,5]]},"69":{"position":[[547,5]]}},"keywords":{}}],["mock",{"_index":919,"title":{},"content":{"76":{"position":[[79,4],[176,4]]}},"keywords":{}}],["mock<billingrepository>",{"_index":864,"title":{},"content":{"73":{"position":[[3324,31]]}},"keywords":{}}],["mock<notify>",{"_index":925,"title":{},"content":{"76":{"position":[[448,21]]}},"keywords":{}}],["mock<userrepository>",{"_index":860,"title":{},"content":{"73":{"position":[[3175,28]]}},"keywords":{}}],["mockdeep",{"_index":916,"title":{},"content":{"76":{"position":[[49,8],[152,8]]}},"keywords":{}}],["mockdeep<permissionsstore>",{"_index":928,"title":{},"content":{"76":{"position":[[756,34],[1185,34]]}},"keywords":{}}],["modul",{"_index":125,"title":{"7":{"position":[[12,7]]},"25":{"position":[[19,6]]}},"content":{"34":{"position":[[52,8]]},"36":{"position":[[1,7],[192,8]]},"51":{"position":[[48,8]]},"64":{"position":[[76,8]]},"66":{"position":[[168,8]]},"75":{"position":[[143,7]]}},"keywords":{}}],["modules/books/features/bookcard/bookcard.tsx",{"_index":394,"title":{},"content":{"30":{"position":[[2974,44]]}},"keywords":{}}],["modules/books/features/bookcard/uistor",{"_index":367,"title":{},"content":{"30":{"position":[[1676,39]]},"61":{"position":[[1427,39]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/sidebar.tsx",{"_index":580,"title":{},"content":{"45":{"position":[[1838,54]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/uistor",{"_index":266,"title":{},"content":{"24":{"position":[[1156,50]]},"45":{"position":[[1534,50]]}},"keywords":{}}],["modules/permissions/domain/enums.t",{"_index":421,"title":{},"content":{"31":{"position":[[246,36]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/administrationpolicystor",{"_index":223,"title":{},"content":{"24":{"position":[[92,85]]},"37":{"position":[[1,85]]},"43":{"position":[[87,85]]},"45":{"position":[[130,85]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolici",{"_index":343,"title":{},"content":{"30":{"position":[[474,71]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolicystor",{"_index":656,"title":{},"content":{"54":{"position":[[2027,76]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystor",{"_index":648,"title":{},"content":{"54":{"position":[[1171,78]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/rules/calcacceptableag",{"_index":636,"title":{},"content":{"54":{"position":[[449,74]]}},"keywords":{}}],["modules/permissions/features/routeguard",{"_index":741,"title":{},"content":{"64":{"position":[[29,41]]},"68":{"position":[[3,40]]}},"keywords":{}}],["modules/permissions/features/routeguards/adminrouteguard",{"_index":793,"title":{},"content":{"69":{"position":[[424,56]]}},"keywords":{}}],["name",{"_index":242,"title":{},"content":{"24":{"position":[[501,5]]},"30":{"position":[[1004,5]]},"37":{"position":[[772,5]]},"43":{"position":[[758,5]]},"45":{"position":[[447,5]]},"54":{"position":[[1577,5],[2478,5]]},"58":{"position":[[633,5]]},"61":{"position":[[862,5]]},"73":{"position":[[330,5]]}},"keywords":{}}],["new",{"_index":392,"title":{},"content":{"30":{"position":[[2925,3]]},"38":{"position":[[1722,3]]},"54":{"position":[[970,3]]},"73":{"position":[[3511,3]]},"74":{"position":[[548,3]]},"76":{"position":[[482,3]]}},"keywords":{}}],["noadmin",{"_index":423,"title":{},"content":{"31":{"position":[[361,7],[1230,7]]}},"keywords":{}}],["nopayaccount",{"_index":424,"title":{},"content":{"31":{"position":[[414,12]]},"76":{"position":[[1143,12]]}},"keywords":{}}],["notfoundscreen",{"_index":767,"title":{},"content":{"66":{"position":[[725,15]]}},"keywords":{}}],["notifi",{"_index":269,"title":{},"content":{"24":{"position":[[1362,7]]},"30":{"position":[[2094,7],[2963,8]]},"61":{"position":[[1650,7]]},"75":{"position":[[397,7]]}},"keywords":{}}],["notifymock",{"_index":924,"title":{},"content":{"76":{"position":[[435,10],[516,12],[560,11],[857,10]]}},"keywords":{}}],["notifyservic",{"_index":268,"title":{},"content":{"24":{"position":[[1347,14]]},"30":{"position":[[2079,14]]},"61":{"position":[[1635,14]]},"75":{"position":[[382,14]]}},"keywords":{}}],["number",{"_index":638,"title":{},"content":{"54":{"position":[[706,7],[1766,7],[2775,7]]},"61":{"position":[[1051,7]]},"74":{"position":[[274,7]]}},"keywords":{}}],["observ",{"_index":399,"title":{},"content":{"30":{"position":[[3074,11]]},"45":{"position":[[949,8],[1072,11],[1917,11]]},"60":{"position":[[123,11]]},"69":{"position":[[531,8],[828,11]]}},"keywords":{}}],["onclick={addtoshelf}>добав",{"_index":406,"title":{},"content":{"30":{"position":[[3271,32]]}},"keywords":{}}],["onclose={closepayaccount",{"_index":411,"title":{},"content":{"30":{"position":[[3393,25]]}},"keywords":{}}],["onretri",{"_index":706,"title":{},"content":{"60":{"position":[[582,8]]}},"keywords":{}}],["opendoccr",{"_index":271,"title":{},"content":{"24":{"position":[[1466,15]]}},"keywords":{}}],["openpayaccount",{"_index":388,"title":{},"content":{"30":{"position":[[2740,14]]},"61":{"position":[[2272,14]]}},"keywords":{}}],["openpaymentaccount",{"_index":908,"title":{},"content":{"75":{"position":[[1441,18]]}},"keywords":{}}],["organ",{"_index":323,"title":{},"content":{"28":{"position":[[317,12],[373,12],[696,13],[725,12]]}},"keywords":{}}],["organizationmanag",{"_index":613,"title":{},"content":{"48":{"position":[[264,22],[419,24]]}},"keywords":{}}],["overhead",{"_index":782,"title":{},"content":{"67":{"position":[[65,9]]}},"keywords":{}}],["page",{"_index":147,"title":{"65":{"position":[[28,5]]}},"content":{"15":{"position":[[24,4]]},"65":{"position":[[41,5],[127,4],[187,5]]},"66":{"position":[[20,6],[81,6]]}},"keywords":{}}],["pagebook",{"_index":145,"title":{},"content":{"15":{"position":[[7,8]]}},"keywords":{}}],["pagelayout",{"_index":795,"title":{},"content":{"69":{"position":[[575,11]]}},"keywords":{}}],["paid",{"_index":871,"title":{},"content":{"73":{"position":[[4242,5],[5227,5]]}},"keywords":{}}],["partial<billingrepositorydto.billinginfo>",{"_index":856,"title":{},"content":{"73":{"position":[[3001,48]]}},"keywords":{}}],["pay",{"_index":425,"title":{},"content":{"31":{"position":[[433,3]]}},"keywords":{}}],["payment",{"_index":650,"title":{},"content":{"54":{"position":[[1583,10]]},"61":{"position":[[868,10]]}},"keywords":{}}],["paymentaccount",{"_index":88,"title":{},"content":{"4":{"position":[[319,16]]}},"keywords":{}}],["paymentaccountfreeaccount",{"_index":71,"title":{},"content":{"4":{"position":[[32,25]]}},"keywords":{}}],["paymentpolicystor",{"_index":461,"title":{},"content":{"34":{"position":[[233,19]]},"38":{"position":[[757,19]]},"54":{"position":[[1078,18],[1313,18]]},"61":{"position":[[598,18]]}},"keywords":{}}],["paypermiss",{"_index":727,"title":{},"content":{"61":{"position":[[1873,13]]}},"keywords":{}}],["paypermission.hasreason(permissiondenialreason.notacceptag",{"_index":731,"title":{},"content":{"61":{"position":[[2053,62]]}},"keywords":{}}],["paypermission.isallow",{"_index":729,"title":{},"content":{"61":{"position":[[1956,25]]}},"keywords":{}}],["permiss",{"_index":103,"title":{"7":{"position":[[0,11]]},"12":{"position":[[14,11]]},"16":{"position":[[17,11]]},"17":{"position":[[0,11]]},"25":{"position":[[7,11]]},"26":{"position":[[7,11]]},"41":{"position":[[13,11]]},"43":{"position":[[9,11]]},"44":{"position":[[4,11]]},"45":{"position":[[34,11]]},"46":{"position":[[0,10]]},"52":{"position":[[33,12]]},"75":{"position":[[36,12]]},"76":{"position":[[4,12]]}},"content":{"4":{"position":[[627,10]]},"5":{"position":[[26,11]]},"17":{"position":[[1,11],[102,13],[194,12]]},"24":{"position":[[1261,12],[1501,10]]},"28":{"position":[[596,11]]},"30":{"position":[[2031,12]]},"31":{"position":[[60,11]]},"34":{"position":[[67,12]]},"36":{"position":[[66,11],[211,10]]},"37":{"position":[[712,11]]},"38":{"position":[[1859,12]]},"39":{"position":[[77,11],[116,11]]},"41":{"position":[[21,11],[249,10]]},"42":{"position":[[74,10],[346,10],[575,11],[785,10],[961,11]]},"43":{"position":[[1,11]]},"44":{"position":[[48,10]]},"45":{"position":[[1638,12]]},"46":{"position":[[1,10],[125,11]]},"47":{"position":[[197,10],[957,10],[1122,10]]},"48":{"position":[[10,10]]},"51":{"position":[[63,12]]},"52":{"position":[[22,11]]},"54":{"position":[[269,12],[317,11]]},"59":{"position":[[1675,10]]},"60":{"position":[[790,11]]},"61":{"position":[[463,11],[1414,11],[1587,12]]},"62":{"position":[[27,11],[88,11],[376,12]]},"64":{"position":[[91,12]]},"65":{"position":[[297,11]]},"66":{"position":[[183,12]]},"69":{"position":[[151,11],[362,11]]},"71":{"position":[[62,10],[166,11],[178,11],[452,11]]},"73":{"position":[[1012,11],[1085,10],[1257,10]]},"74":{"position":[[788,10]]},"75":{"position":[[131,11],[334,12]]},"76":{"position":[[13,11]]}},"keywords":{}}],["permission.hasreason(denialreason.noadmin",{"_index":551,"title":{},"content":{"44":{"position":[[149,42]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.noadmin",{"_index":276,"title":{},"content":{"24":{"position":[[1668,54]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.twofa",{"_index":278,"title":{},"content":{"24":{"position":[[1800,52]]}},"keywords":{}}],["permission.isallow",{"_index":274,"title":{},"content":{"24":{"position":[[1572,22]]},"71":{"position":[[509,22]]}},"keywords":{}}],["permission.reason",{"_index":820,"title":{},"content":{"71":{"position":[[637,18],[780,18]]}},"keywords":{}}],["permission={permissionsstore.administration.administrationact",{"_index":567,"title":{},"content":{"45":{"position":[[1140,66]]},"69":{"position":[[896,66]]}},"keywords":{}}],["permissiondenialreason",{"_index":371,"title":{},"content":{"30":{"position":[[1813,23]]},"31":{"position":[[296,22]]},"37":{"position":[[193,22]]},"43":{"position":[[279,22]]},"69":{"position":[[634,23]]},"71":{"position":[[105,22]]}},"keywords":{}}],["permissiondenialreason.exceedreadingcount",{"_index":906,"title":{},"content":{"75":{"position":[[1080,42]]}},"keywords":{}}],["permissiondenialreason.missingdata",{"_index":739,"title":{},"content":{"62":{"position":[[209,35],[257,34]]}},"keywords":{}}],["permissiondenialreason.missinguserag",{"_index":824,"title":{},"content":{"71":{"position":[[803,38]]}},"keywords":{}}],["permissiondenialreason.noadmin",{"_index":802,"title":{},"content":{"69":{"position":[[979,33]]}},"keywords":{}}],["permissiondenialreason.nopayaccount",{"_index":821,"title":{},"content":{"71":{"position":[[660,36]]},"73":{"position":[[4084,36],[4349,36]]},"75":{"position":[[845,36]]},"76":{"position":[[1268,36]]}},"keywords":{}}],["permissionguard",{"_index":798,"title":{},"content":{"69":{"position":[[710,15],[733,24]]},"71":{"position":[[431,15]]}},"keywords":{}}],["permissionrouteguard",{"_index":785,"title":{},"content":{"68":{"position":[[221,21],[244,20]]},"70":{"position":[[3,20]]}},"keywords":{}}],["permissions.books.addingtoshelf",{"_index":896,"title":{},"content":{"75":{"position":[[43,32]]}},"keywords":{}}],["permissionsdenialreason",{"_index":441,"title":{},"content":{"31":{"position":[[957,23]]}},"keywords":{}}],["permissionsgateway",{"_index":573,"title":{},"content":{"45":{"position":[[1379,18]]}},"keywords":{}}],["permissionspolici",{"_index":350,"title":{},"content":{"30":{"position":[[748,18]]},"54":{"position":[[1359,18],[2211,18]]},"58":{"position":[[377,18]]},"61":{"position":[[644,18]]},"73":{"position":[[74,18]]}},"keywords":{}}],["permissionspolicymanagerstor",{"_index":649,"title":{},"content":{"54":{"position":[[1406,30],[2258,30]]},"61":{"position":[[691,30]]}},"keywords":{}}],["permissionsstatu",{"_index":693,"title":{},"content":{"60":{"position":[[189,17]]}},"keywords":{}}],["permissionsstatus.error",{"_index":705,"title":{},"content":{"60":{"position":[[555,26]]}},"keywords":{}}],["permissionsstor",{"_index":267,"title":{"38":{"position":[[38,17]]}},"content":{"24":{"position":[[1274,17]]},"30":{"position":[[1837,17],[1855,17],[2044,17],[2945,17]]},"34":{"position":[[106,17]]},"38":{"position":[[1,16],[852,16],[1703,16],[1726,17],[1872,17]]},"45":{"position":[[993,16],[1651,17]]},"51":{"position":[[102,17]]},"52":{"position":[[73,17]]},"59":{"position":[[1,16],[363,16]]},"61":{"position":[[425,17],[1600,17]]},"69":{"position":[[658,16]]},"75":{"position":[[347,17]]},"76":{"position":[[403,17]]}},"keywords":{}}],["permissionsstore.preparedata",{"_index":670,"title":{"59":{"position":[[0,28]]},"61":{"position":[[12,29]]}},"content":{"60":{"position":[[1,28],[268,31],[591,29]]}},"keywords":{}}],["permissionsstore.preparingdatastatu",{"_index":694,"title":{},"content":{"60":{"position":[[209,37]]}},"keywords":{}}],["permissionsstore.t",{"_index":463,"title":{},"content":{"34":{"position":[[286,19]]},"51":{"position":[[261,19]]}},"keywords":{}}],["permissionsstoremock",{"_index":923,"title":{},"content":{"76":{"position":[[380,22],[675,20],[733,20],[1078,20],[1162,20]]}},"keywords":{}}],["permissionsstoreзапрашива",{"_index":715,"title":{},"content":{"61":{"position":[[274,29]]}},"keywords":{}}],["permissionstor",{"_index":466,"title":{},"content":{"34":{"position":[[400,16]]},"38":{"position":[[158,16]]}},"keywords":{}}],["permissionsвозможн",{"_index":505,"title":{},"content":{"38":{"position":[[2134,22]]}},"keywords":{}}],["placehold",{"_index":796,"title":{},"content":{"69":{"position":[[587,11],[1379,12]]},"71":{"position":[[10,11]]}},"keywords":{}}],["polici",{"_index":129,"title":{"8":{"position":[[0,9]]},"33":{"position":[[0,9]]},"39":{"position":[[31,9]]},"57":{"position":[[7,6]]},"59":{"position":[[56,7]]},"73":{"position":[[18,6]]}},"content":{"24":{"position":[[237,7],[245,7]]},"30":{"position":[[654,6],[740,7]]},"31":{"position":[[74,9]]},"34":{"position":[[37,9],[136,9],[361,8]]},"36":{"position":[[85,8],[151,8]]},"37":{"position":[[351,6],[446,7],[454,7]]},"38":{"position":[[684,13],[784,13],[2251,8]]},"39":{"position":[[1,8],[134,8],[239,8]]},"43":{"position":[[37,6],[437,6],[532,7],[540,7]]},"51":{"position":[[132,9]]},"54":{"position":[[1351,7],[2203,7]]},"57":{"position":[[8,6]]},"58":{"position":[[124,6],[283,6],[369,7],[699,6]]},"59":{"position":[[93,7],[1284,6],[1401,6],[1652,6]]},"61":{"position":[[636,7]]},"73":{"position":[[8,7],[66,7],[1039,7]]}},"keywords":{}}],["policy.createpermiss",{"_index":542,"title":{},"content":{"43":{"position":[[61,24]]}},"keywords":{}}],["policymanag",{"_index":231,"title":{},"content":{"24":{"position":[[283,14]]},"30":{"position":[[780,14]]},"37":{"position":[[492,14]]},"38":{"position":[[888,14],[1148,13]]},"43":{"position":[[578,14]]},"45":{"position":[[281,14]]},"54":{"position":[[1391,14],[2243,14]]},"58":{"position":[[409,14],[718,13]]},"59":{"position":[[399,14],[659,13]]},"61":{"position":[[676,14]]},"73":{"position":[[106,14],[3067,13],[3533,14]]}},"keywords":{}}],["policymanager.createpolici",{"_index":353,"title":{},"content":{"30":{"position":[[975,28]]},"37":{"position":[[627,26]]},"54":{"position":[[1548,28],[2449,28]]},"58":{"position":[[604,28]]},"61":{"position":[[833,28]]},"73":{"position":[[301,28]]}},"keywords":{}}],["policymanager.preparedata",{"_index":674,"title":{},"content":{"59":{"position":[[1332,25]]}},"keywords":{}}],["policymanager.preparedataasync",{"_index":868,"title":{},"content":{"73":{"position":[[3588,33]]}},"keywords":{}}],["policymanagerstor",{"_index":232,"title":{},"content":{"24":{"position":[[298,19]]},"30":{"position":[[634,19],[795,19]]},"37":{"position":[[331,19],[507,19]]},"38":{"position":[[472,18],[903,19]]},"43":{"position":[[417,19],[593,19]]},"45":{"position":[[296,19]]},"58":{"position":[[263,19],[424,19]]},"59":{"position":[[196,18],[414,19],[1220,19],[1240,18]]},"73":{"position":[[121,19],[2796,18]]}},"keywords":{}}],["pr",{"_index":11,"title":{},"content":{"0":{"position":[[125,2]]}},"keywords":{}}],["preparedata",{"_index":244,"title":{},"content":{"24":{"position":[[525,12]]},"30":{"position":[[1019,12]]},"37":{"position":[[886,12]]},"38":{"position":[[1530,11]]},"43":{"position":[[782,12]]},"45":{"position":[[471,12]]},"54":{"position":[[1594,12],[2493,12]]},"58":{"position":[[651,11],[732,12]]},"59":{"position":[[37,12],[1041,11],[1381,11]]},"61":{"position":[[189,12],[879,12]]},"73":{"position":[[345,12],[2782,12],[2846,11],[3865,12]]}},"keywords":{}}],["preparedataasync",{"_index":855,"title":{},"content":{"73":{"position":[[2860,17]]}},"keywords":{}}],["preparedataи",{"_index":672,"title":{},"content":{"59":{"position":[[1308,12]]}},"keywords":{}}],["preparingdatastatu",{"_index":499,"title":{},"content":{"38":{"position":[[1602,21]]},"59":{"position":[[1113,21]]}},"keywords":{}}],["privat",{"_index":228,"title":{},"content":{"24":{"position":[[220,7],[266,7],[318,7],[361,7],[1244,7],[1292,7],[1330,7],[1370,7]]},"30":{"position":[[723,7],[815,7],[864,7],[1981,7],[2014,7],[2062,7]]},"37":{"position":[[429,7],[475,7],[527,7]]},"38":{"position":[[871,7]]},"43":{"position":[[515,7],[561,7],[613,7]]},"45":{"position":[[264,7],[316,7]]},"54":{"position":[[1334,7],[1437,7],[2186,7],[2289,7],[2338,7]]},"58":{"position":[[352,7],[444,7],[493,7]]},"59":{"position":[[382,7]]},"61":{"position":[[619,7],[722,7],[1537,7],[1570,7],[1618,7],[1658,7],[1758,7]]},"73":{"position":[[49,7],[141,7],[190,7]]},"75":{"position":[[317,7],[365,7]]}},"keywords":{}}],["promise<void>",{"_index":246,"title":{},"content":{"24":{"position":[[548,19]]},"37":{"position":[[909,19]]},"43":{"position":[[805,19]]},"45":{"position":[[494,19]]}},"keywords":{}}],["promise.al",{"_index":355,"title":{},"content":{"30":{"position":[[1055,13]]},"54":{"position":[[2529,13]]},"58":{"position":[[768,13]]},"73":{"position":[[381,13]]}},"keywords":{}}],["promise.all([this.userrepo.getrolesquery().async",{"_index":249,"title":{},"content":{"24":{"position":[[582,53]]},"37":{"position":[[943,53]]},"43":{"position":[[839,53]]},"45":{"position":[[528,53]]}},"keywords":{}}],["promise.all([userrepo.getpersoninfoquery().async",{"_index":651,"title":{},"content":{"54":{"position":[[1630,53]]},"61":{"position":[[915,53]]}},"keywords":{}}],["prop",{"_index":396,"title":{},"content":{"30":{"position":[[3025,5],[3092,6]]},"69":{"position":[[763,5],[852,6]]},"71":{"position":[[156,5],[491,6]]}},"keywords":{}}],["public",{"_index":250,"title":{},"content":{"24":{"position":[[688,6],[1459,6]]},"30":{"position":[[1214,6],[1935,6],[2158,6],[2733,6],[2801,6]]},"38":{"position":[[923,6],[982,6],[1523,6],[1591,6],[1944,6]]},"43":{"position":[[945,6]]},"45":{"position":[[634,6],[1723,6]]},"47":{"position":[[270,6],[485,6],[703,6],[1254,6]]},"48":{"position":[[297,6],[340,6],[375,6],[408,6],[465,6],[501,6]]},"49":{"position":[[77,6],[146,6]]},"54":{"position":[[1729,6],[2731,6]]},"58":{"position":[[971,6]]},"59":{"position":[[434,6],[493,6],[1034,6],[1102,6]]},"61":{"position":[[1014,6],[1491,6],[1843,6],[2265,6],[2333,6]]},"73":{"position":[[540,6],[1406,6],[4468,6]]},"75":{"position":[[267,6],[437,6],[1434,6],[1510,6]]}},"keywords":{}}],["quot;базовый"",{"_index":533,"title":{},"content":{"42":{"position":[[727,19]]}},"keywords":{}}],["quot;добав",{"_index":314,"title":{},"content":{"28":{"position":[[20,14]]},"30":{"position":[[225,14]]}},"keywords":{}}],["quot;достигнут",{"_index":340,"title":{},"content":{"30":{"position":[[402,16]]}},"keywords":{}}],["quot;доступ",{"_index":604,"title":{},"content":{"48":{"position":[[48,12]]}},"keywords":{}}],["quot;ознакомл",{"_index":536,"title":{},"content":{"42":{"position":[[903,16]]}},"keywords":{}}],["quot;отправить"",{"_index":534,"title":{},"content":{"42":{"position":[[853,21]]}},"keywords":{}}],["quot;размазыванию"",{"_index":95,"title":{},"content":{"4":{"position":[[499,24]]}},"keywords":{}}],["quot;редактирова",{"_index":527,"title":{},"content":{"42":{"position":[[224,19]]}},"keywords":{}}],["quot;созда",{"_index":75,"title":{},"content":{"4":{"position":[[85,13]]},"5":{"position":[[83,13]]},"42":{"position":[[8,13],[509,13],[670,13]]},"45":{"position":[[20,13]]},"47":{"position":[[8,13]]}},"keywords":{}}],["quot;удал",{"_index":317,"title":{},"content":{"28":{"position":[[107,13]]}},"keywords":{}}],["rbac",{"_index":30,"title":{"3":{"position":[[44,5]]},"4":{"position":[[9,4]]}},"content":{"3":{"position":[[104,4],[291,4]]}},"keywords":{}}],["react",{"_index":563,"title":{},"content":{"45":{"position":[[971,5]]},"69":{"position":[[513,8],[553,5]]}},"keywords":{}}],["reactnod",{"_index":794,"title":{},"content":{"69":{"position":[[496,9],[783,10]]},"71":{"position":[[328,10]]}},"keywords":{}}],["reactnode>",{"_index":817,"title":{},"content":{"71":{"position":[[303,14]]}},"keywords":{}}],["read",{"_index":146,"title":{},"content":{"15":{"position":[[16,7]]}},"keywords":{}}],["reading.tsx",{"_index":757,"title":{},"content":{"66":{"position":[[152,11]]}},"keywords":{}}],["readingbook",{"_index":474,"title":{},"content":{"36":{"position":[[342,11]]},"48":{"position":[[386,13]]}},"keywords":{}}],["readingbookpag",{"_index":771,"title":{},"content":{"66":{"position":[[913,15],[1192,16]]}},"keywords":{}}],["readingbookrouteguard",{"_index":744,"title":{},"content":{"64":{"position":[[187,22]]},"66":{"position":[[279,22],[846,21]]}},"keywords":{}}],["readingbookscreen",{"_index":768,"title":{},"content":{"66":{"position":[[741,17]]}},"keywords":{}}],["readingbookдоступ",{"_index":612,"title":{},"content":{"48":{"position":[[211,17]]}},"keywords":{}}],["readonli",{"_index":229,"title":{},"content":{"24":{"position":[[228,8],[274,8],[326,8],[369,8],[1252,8],[1300,8],[1338,8],[1378,8]]},"30":{"position":[[731,8],[823,8],[872,8],[1989,8],[2022,8],[2070,8]]},"37":{"position":[[437,8],[483,8],[535,8]]},"38":{"position":[[879,8],[930,8],[989,8],[1850,8]]},"43":{"position":[[523,8],[569,8],[621,8]]},"45":{"position":[[272,8],[324,8],[1629,8]]},"54":{"position":[[1342,8],[1445,8],[2194,8],[2297,8],[2346,8]]},"58":{"position":[[360,8],[452,8],[501,8]]},"59":{"position":[[390,8],[441,8],[500,8]]},"61":{"position":[[627,8],[730,8],[1545,8],[1578,8],[1626,8],[1666,8]]},"73":{"position":[[57,8],[149,8],[198,8]]},"75":{"position":[[325,8],[373,8]]}},"keywords":{}}],["reason",{"_index":131,"title":{"9":{"position":[[0,8]]},"29":{"position":[[0,8]]},"31":{"position":[[4,7]]}},"content":{"31":{"position":[[89,7],[215,7],[811,8],[863,7]]},"32":{"position":[[13,6],[106,7]]},"44":{"position":[[117,8],[206,8]]},"62":{"position":[[137,7],[201,7],[250,6]]},"73":{"position":[[3968,7],[4063,6]]}},"keywords":{}}],["reasonзначен",{"_index":452,"title":{},"content":{"32":{"position":[[91,14]]}},"keywords":{}}],["reasonпоследн",{"_index":887,"title":{},"content":{"74":{"position":[[158,15]]}},"keywords":{}}],["record<str",{"_index":816,"title":{},"content":{"71":{"position":[[285,17]]}},"keywords":{}}],["renderrout",{"_index":691,"title":{},"content":{"60":{"position":[[149,12]]}},"keywords":{}}],["return",{"_index":252,"title":{},"content":{"24":{"position":[[725,6],[994,6],[1090,6],[1655,7],[1787,7],[1967,7]]},"30":{"position":[[1243,6],[1352,6],[1462,6],[1601,6],[2311,7],[2432,7],[2622,7],[3205,6]]},"38":{"position":[[1626,6],[1981,6]]},"43":{"position":[[982,6],[1111,6]]},"45":{"position":[[671,6],[787,6],[1092,6],[1760,6],[1998,6]]},"47":{"position":[[307,6],[423,6],[525,6],[641,6],[738,6],[854,6],[1291,6],[1407,6]]},"54":{"position":[[800,6],[872,6],[1004,6],[1973,6],[2791,6],[2991,6],[3119,6]]},"58":{"position":[[1000,6],[1109,6],[1219,6],[1358,6]]},"59":{"position":[[1137,6]]},"60":{"position":[[360,6]]},"61":{"position":[[1258,6],[1788,6],[2040,7],[2165,7]]},"66":{"position":[[554,6],[987,6],[1057,6]]},"69":{"position":[[867,6],[1628,6]]},"71":{"position":[[534,6],[592,6],[699,6],[844,6],[934,6]]},"73":{"position":[[569,6],[678,6],[788,6],[927,6],[1435,6],[1582,6],[1742,6],[1944,6],[3622,6],[4497,6],[4606,6],[4716,6],[4855,6]]},"74":{"position":[[368,6],[440,6],[584,6]]},"75":{"position":[[686,7],[915,7],[1210,7]]},"76":{"position":[[551,6]]}},"keywords":{}}],["role",{"_index":40,"title":{},"content":{"3":{"position":[[109,5]]},"55":{"position":[[107,6],[298,6]]}},"keywords":{}}],["rout",{"_index":141,"title":{"14":{"position":[[0,5]]},"15":{"position":[[14,5]]},"63":{"position":[[0,5]]},"68":{"position":[[9,5]]}},"content":{"64":{"position":[[5,5]]},"65":{"position":[[1,5],[103,5]]},"67":{"position":[[15,5],[125,5]]},"68":{"position":[[63,5],[176,5],[307,5]]}},"keywords":{}}],["routeguards)взаимодейств",{"_index":207,"title":{},"content":{"21":{"position":[[294,27]]}},"keywords":{}}],["router",{"_index":270,"title":{},"content":{"24":{"position":[[1387,7],[1395,7]]}},"keywords":{}}],["routesguard",{"_index":742,"title":{},"content":{"64":{"position":[[132,13]]},"66":{"position":[[224,13]]}},"keywords":{}}],["rule",{"_index":133,"title":{"10":{"position":[[0,6]]},"11":{"position":[[14,6]]},"50":{"position":[[0,6]]},"52":{"position":[[0,5]]},"53":{"position":[[11,6]]},"74":{"position":[[13,6]]}},"content":{"39":{"position":[[305,6]]},"51":{"position":[[36,6],[154,6]]},"52":{"position":[[1,5]]},"53":{"position":[[1,5]]},"54":{"position":[[423,5],[1285,14],[2139,14]]},"55":{"position":[[5,5]]},"61":{"position":[[570,14]]},"74":{"position":[[18,5]]}},"keywords":{}}],["runtim",{"_index":118,"title":{},"content":{"5":{"position":[[329,7]]}},"keywords":{}}],["setup",{"_index":848,"title":{},"content":{"73":{"position":[[2298,7],[2925,5],[3759,7],[4203,7],[5188,7]]},"76":{"position":[[372,5]]}},"keywords":{}}],["setup(permissionsstoremock",{"_index":929,"title":{},"content":{"76":{"position":[[872,28],[1331,28]]}},"keywords":{}}],["share",{"_index":347,"title":{},"content":{"30":{"position":[[618,6]]},"37":{"position":[[315,6]]},"38":{"position":[[451,6]]},"43":{"position":[[401,6]]},"54":{"position":[[598,6]]},"58":{"position":[[247,6]]},"59":{"position":[[175,6]]}},"keywords":{}}],["shelf",{"_index":878,"title":{},"content":{"73":{"position":[[5289,6]]}},"keywords":{}}],["showcreationdocbutton",{"_index":592,"title":{},"content":{"47":{"position":[[208,22],[281,23]]}},"keywords":{}}],["showeditingdocmod",{"_index":594,"title":{},"content":{"47":{"position":[[714,21]]}},"keywords":{}}],["sidebar",{"_index":556,"title":{},"content":{"45":{"position":[[48,7],[1062,7],[1907,7]]}},"keywords":{}}],["singleton",{"_index":483,"title":{},"content":{"38":{"position":[[24,9],[1680,9]]}},"keywords":{}}],["store",{"_index":460,"title":{},"content":{"34":{"position":[[88,7]]},"51":{"position":[[84,7]]}},"keywords":{}}],["string",{"_index":376,"title":{},"content":{"30":{"position":[[2006,7],[2911,7],[3039,7]]},"32":{"position":[[126,6]]},"44":{"position":[[126,7],[215,7]]},"49":{"position":[[111,7],[181,7]]},"54":{"position":[[729,7]]},"55":{"position":[[114,7],[217,8],[241,7],[305,7],[369,8],[393,7]]},"61":{"position":[[1562,7]]},"74":{"position":[[297,7]]},"75":{"position":[[466,7]]}},"keywords":{}}],["sut",{"_index":847,"title":{},"content":{"73":{"position":[[2284,3],[3505,3],[3631,3],[3745,3],[4189,3],[5174,3]]},"76":{"position":[[476,3],[572,3],[1323,3]]}},"keywords":{}}],["sut.addtoshelf('id",{"_index":927,"title":{},"content":{"76":{"position":[[529,21]]}},"keywords":{}}],["systemdenialreason",{"_index":429,"title":{},"content":{"31":{"position":[[585,18],[842,18],[896,18]]}},"keywords":{}}],["systemdenialreason.internalerror",{"_index":442,"title":{},"content":{"31":{"position":[[1048,33]]}},"keywords":{}}],["systemdenialreason.missingdata",{"_index":443,"title":{},"content":{"31":{"position":[[1153,31]]}},"keywords":{}}],["theme={theme}>",{"_index":698,"title":{},"content":{"60":{"position":[[387,17]]}},"keywords":{}}],["this.administr",{"_index":495,"title":{},"content":{"38":{"position":[[1293,19]]},"59":{"position":[[804,19]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().async",{"_index":357,"title":{},"content":{"30":{"position":[[1108,47]]},"54":{"position":[[2626,47]]},"58":{"position":[[865,47]]},"73":{"position":[[434,47]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().data",{"_index":659,"title":{},"content":{"54":{"position":[[3048,44]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery()?.data",{"_index":361,"title":{},"content":{"30":{"position":[[1390,45]]},"58":{"position":[[1147,45]]},"73":{"position":[[716,45],[1620,45],[4644,45]]}},"keywords":{}}],["this.book",{"_index":496,"title":{},"content":{"38":{"position":[[1381,10]]},"59":{"position":[[892,10]]}},"keywords":{}}],["this.bookid",{"_index":380,"title":{},"content":{"30":{"position":[[2274,14]]}},"keywords":{}}],["this.booksrepo.getbookbyidquery(this.bookid",{"_index":725,"title":{},"content":{"61":{"position":[[1795,45]]}},"keywords":{}}],["this.isopenaccountpay",{"_index":909,"title":{},"content":{"75":{"position":[[1473,25],[1550,25]]}},"keywords":{}}],["this.isopenpayaccount",{"_index":389,"title":{},"content":{"30":{"position":[[2768,21],[2837,21]]},"61":{"position":[[2300,21],[2369,21]]}},"keywords":{}}],["this.notifyservice.error",{"_index":277,"title":{},"content":{"24":{"position":[[1725,25],[1918,25],[1977,25]]},"30":{"position":[[2541,25],[2632,25]]},"61":{"position":[[2175,25]]},"75":{"position":[[1129,25],[1333,25]]}},"keywords":{}}],["this.notifyservice.error('вы",{"_index":732,"title":{},"content":{"61":{"position":[[2118,28]]}},"keywords":{}}],["this.notifyservice.info(`книг",{"_index":379,"title":{},"content":{"30":{"position":[[2243,30]]},"75":{"position":[[623,30]]}},"keywords":{}}],["this.notifyservice.success(`книг",{"_index":730,"title":{},"content":{"61":{"position":[[1984,33]]}},"keywords":{}}],["this.openpaymentaccount",{"_index":383,"title":{},"content":{"30":{"position":[[2405,26]]},"75":{"position":[[888,26]]}},"keywords":{}}],["this.permissions.administration.administrationact",{"_index":273,"title":{},"content":{"24":{"position":[[1514,54]]}},"keywords":{}}],["this.permissions.administration.administrationactions.isallow",{"_index":503,"title":{},"content":{"38":{"position":[[1988,64]]},"45":{"position":[[1767,64]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason",{"_index":904,"title":{},"content":{"75":{"position":[[797,47],[1032,47]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.exceedreadingcount",{"_index":384,"title":{},"content":{"30":{"position":[[2447,89]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.nopay",{"_index":382,"title":{},"content":{"30":{"position":[[2324,78]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.isallow",{"_index":378,"title":{},"content":{"30":{"position":[[2192,48]]},"75":{"position":[[572,48]]}},"keywords":{}}],["this.permissions.calcpayment(this.bookbyidquery.acceptableag",{"_index":728,"title":{},"content":{"61":{"position":[[1889,63]]}},"keywords":{}}],["this.polici",{"_index":240,"title":{},"content":{"24":{"position":[[453,11]]},"30":{"position":[[961,11]]},"37":{"position":[[724,11]]},"43":{"position":[[710,11]]},"54":{"position":[[1534,11],[2435,11]]},"58":{"position":[[590,11]]},"61":{"position":[[819,11]]},"73":{"position":[[287,11]]}},"keywords":{}}],["this.policy.createpermission((allow",{"_index":253,"title":{},"content":{"24":{"position":[[732,36]]},"30":{"position":[[1250,36]]},"43":{"position":[[989,36]]},"54":{"position":[[1780,36],[2798,36]]},"58":{"position":[[1007,36]]},"61":{"position":[[1065,36]]},"73":{"position":[[576,36],[1442,36],[4504,36]]}},"keywords":{}}],["this.policymanag",{"_index":494,"title":{},"content":{"38":{"position":[[1244,18],[1348,19],[1418,19]]},"59":{"position":[[755,18],[859,19],[929,19]]}},"keywords":{}}],["this.policymanager.createpermission((allow",{"_index":558,"title":{},"content":{"45":{"position":[[678,43]]},"47":{"position":[[314,43],[532,43],[745,43],[1298,43]]}},"keywords":{}}],["this.policymanager.createpolici",{"_index":241,"title":{},"content":{"24":{"position":[[467,33]]},"37":{"position":[[738,33]]},"43":{"position":[[724,33]]},"45":{"position":[[413,33]]}},"keywords":{}}],["this.policymanager.preparedatasync",{"_index":498,"title":{},"content":{"38":{"position":[[1553,37]]},"59":{"position":[[1064,37]]}},"keywords":{}}],["this.policymanager.preparingdatastatu",{"_index":500,"title":{},"content":{"38":{"position":[[1633,39]]},"59":{"position":[[1144,39]]}},"keywords":{}}],["this.router.push(app_routes.createdoc.getredirectpath",{"_index":275,"title":{},"content":{"24":{"position":[[1597,57]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().async",{"_index":657,"title":{},"content":{"54":{"position":[[2582,43]]},"58":{"position":[[821,43]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().data?.birthday",{"_index":653,"title":{},"content":{"54":{"position":[[1887,50],[2905,50]]},"61":{"position":[[1172,50]]}},"keywords":{}}],["this.userrepo.getrolesquery().async",{"_index":356,"title":{},"content":{"30":{"position":[[1069,38]]},"54":{"position":[[2543,38]]},"58":{"position":[[782,38]]},"73":{"position":[[395,38]]}},"keywords":{}}],["this.userrepo.getrolesquery().data?.isadmin",{"_index":263,"title":{},"content":{"24":{"position":[[1042,45]]},"30":{"position":[[1304,45]]},"43":{"position":[[1043,45]]},"45":{"position":[[739,45]]},"47":{"position":[[375,45],[593,45],[806,45],[1359,45]]},"58":{"position":[[1061,45]]},"73":{"position":[[630,45],[1534,45],[4558,45]]}},"keywords":{}}],["titl",{"_index":805,"title":{},"content":{"69":{"position":[[1040,6]]}},"keywords":{}}],["title="доступн",{"_index":809,"title":{},"content":{"69":{"position":[[1113,20]]}},"keywords":{}}],["title="книг",{"_index":773,"title":{},"content":{"66":{"position":[[1013,17]]}},"keywords":{}}],["title="необходим",{"_index":822,"title":{},"content":{"71":{"position":[[722,22],[867,22]]}},"keywords":{}}],["title="нет",{"_index":829,"title":{},"content":{"71":{"position":[[957,15]]}},"keywords":{}}],["to={app_routes.createbook.getredirectpath()}>",{"_index":569,"title":{},"content":{"45":{"position":[[1230,48],[2094,48]]}},"keywords":{}}],["toggl",{"_index":149,"title":{"16":{"position":[[8,6]]},"17":{"position":[[39,7]]}},"content":{"17":{"position":[[40,6],[81,6],[116,8],[153,6]]},"41":{"position":[[292,6]]},"42":{"position":[[597,7]]}},"keywords":{}}],["true",{"_index":239,"title":{},"content":{"24":{"position":[[444,4],[1448,4]]},"30":{"position":[[952,4],[2147,4],[2792,5]]},"37":{"position":[[615,4]]},"38":{"position":[[1136,4],[1933,4]]},"43":{"position":[[701,4]]},"45":{"position":[[404,4],[1712,4]]},"54":{"position":[[1525,4],[2426,4]]},"58":{"position":[[581,4]]},"59":{"position":[[647,4]]},"61":{"position":[[810,4],[1747,4],[2324,5]]},"73":{"position":[[278,4],[2315,4],[3776,4],[5233,5]]},"75":{"position":[[1501,5]]}},"keywords":{}}],["two",{"_index":217,"title":{"23":{"position":[[4,4]]}},"content":{},"keywords":{}}],["twofa",{"_index":235,"title":{},"content":{"24":{"position":[[378,6],[791,5],[1309,6]]}},"keywords":{}}],["twofa.ispass",{"_index":261,"title":{},"content":{"24":{"position":[[974,17]]}},"keywords":{}}],["twofaservic",{"_index":236,"title":{},"content":{"24":{"position":[[385,13],[1316,13]]}},"keywords":{}}],["type",{"_index":395,"title":{},"content":{"30":{"position":[[3020,4]]},"37":{"position":[[138,4]]},"38":{"position":[[313,4],[465,4],[705,4]]},"43":{"position":[[224,4]]},"44":{"position":[[43,4]]},"59":{"position":[[189,4]]},"62":{"position":[[146,4]]},"69":{"position":[[489,4],[758,4]]},"71":{"position":[[55,4],[151,4]]}},"keywords":{}}],["ui",{"_index":56,"title":{"46":{"position":[[33,3]]}},"content":{"3":{"position":[[364,3],[570,3]]},"45":{"position":[[1435,2]]},"46":{"position":[[55,3],[95,2]]},"47":{"position":[[970,2]]}},"keywords":{}}],["uistor",{"_index":136,"title":{"12":{"position":[[28,8]]},"75":{"position":[[13,8]]}},"content":{"24":{"position":[[1221,7]]},"30":{"position":[[1925,7]]},"38":{"position":[[1820,7]]},"45":{"position":[[1524,8],[1599,7]]},"61":{"position":[[1481,7]]},"75":{"position":[[24,7],[161,7],[257,7]]}},"keywords":{}}],["uistore(bookid",{"_index":393,"title":{},"content":{"30":{"position":[[2929,15]]}},"keywords":{}}],["uistore(permissionsstoremock",{"_index":926,"title":{},"content":{"76":{"position":[[486,29]]}},"keywords":{}}],["useeffect",{"_index":695,"title":{},"content":{"60":{"position":[[247,12]]}},"keywords":{}}],["userbirthday",{"_index":639,"title":{},"content":{"54":{"position":[[714,14],[854,15]]},"55":{"position":[[226,14],[378,14]]},"74":{"position":[[282,14],[422,15]]}},"keywords":{}}],["userouterparam",{"_index":769,"title":{},"content":{"66":{"position":[[795,15],[957,18]]}},"keywords":{}}],["useroutes(rout",{"_index":692,"title":{},"content":{"60":{"position":[[164,18]]}},"keywords":{}}],["userrepo",{"_index":233,"title":{},"content":{"24":{"position":[[335,9]]},"30":{"position":[[881,9]]},"37":{"position":[[544,9]]},"38":{"position":[[1067,9],[1368,9],[1451,9]]},"43":{"position":[[630,9]]},"45":{"position":[[333,9]]},"54":{"position":[[1454,9],[2355,9]]},"58":{"position":[[510,9]]},"59":{"position":[[578,9],[879,9],[962,9]]},"61":{"position":[[739,9]]},"73":{"position":[[207,9]]}},"keywords":{}}],["userrepomock",{"_index":859,"title":{},"content":{"73":{"position":[[3160,12],[3565,13]]}},"keywords":{}}],["userrepositori",{"_index":234,"title":{},"content":{"24":{"position":[[345,15]]},"30":{"position":[[891,15]]},"37":{"position":[[145,14],[554,15]]},"38":{"position":[[267,14],[339,14],[1077,15],[1763,15]]},"43":{"position":[[231,14],[640,15]]},"45":{"position":[[343,15]]},"54":{"position":[[1464,15],[2365,15]]},"58":{"position":[[74,14],[520,15]]},"59":{"position":[[588,15]]},"61":{"position":[[749,15]]},"73":{"position":[[217,15]]}},"keywords":{}}],["usest",{"_index":400,"title":{},"content":{"30":{"position":[[3167,11]]}},"keywords":{}}],["usestate(createuistor",{"_index":581,"title":{},"content":{"45":{"position":[[1973,24]]}},"keywords":{}}],["ux",{"_index":197,"title":{},"content":{"21":{"position":[[117,2]]}},"keywords":{}}],["valid",{"_index":614,"title":{},"content":{"48":{"position":[[290,5]]},"49":{"position":[[70,5]]},"55":{"position":[[34,5]]}},"keywords":{}}],["vitest",{"_index":918,"title":{},"content":{"76":{"position":[[72,6],[168,7]]}},"keywords":{}}],["xaml",{"_index":26,"title":{"2":{"position":[[19,4]]}},"content":{},"keywords":{}}],["а",{"_index":530,"title":{},"content":{"42":{"position":[[587,1]]}},"keywords":{}}],["абстрактн",{"_index":561,"title":{},"content":{"45":{"position":[[910,11]]},"47":{"position":[[1110,11]]},"68":{"position":[[208,12]]}},"keywords":{}}],["админ",{"_index":444,"title":{},"content":{"31":{"position":[[1216,7]]}},"keywords":{}}],["администратор",{"_index":221,"title":{},"content":{"24":{"position":[[48,14],[670,14],[1768,15]]},"31":{"position":[[339,15]]},"42":{"position":[[53,14]]},"43":{"position":[[927,14]]},"45":{"position":[[103,16],[616,14]]},"47":{"position":[[84,15],[1199,15]]},"48":{"position":[[135,14]]},"69":{"position":[[84,15],[1055,15]]},"73":{"position":[[1516,14],[2242,16],[3703,16]]}},"keywords":{}}],["администраторов"",{"_index":810,"title":{},"content":{"69":{"position":[[1145,21]]}},"keywords":{}}],["админск",{"_index":662,"title":{},"content":{"55":{"position":[[57,9]]}},"keywords":{}}],["аккаунт",{"_index":80,"title":{},"content":{"4":{"position":[[150,9]]},"5":{"position":[[148,9],[264,7]]},"24":{"position":[[2058,9]]},"30":{"position":[[72,7],[191,8]]},"31":{"position":[[389,7]]},"41":{"position":[[136,8]]},"42":{"position":[[303,9],[469,7]]},"73":{"position":[[1697,7],[2029,7],[2399,7],[2623,7],[4004,7],[4143,7],[5078,7]]}},"keywords":{}}],["аккаунт"",{"_index":823,"title":{},"content":{"71":{"position":[[754,13]]}},"keywords":{}}],["аккумулирова",{"_index":875,"title":{},"content":{"73":{"position":[[5007,14]]}},"keywords":{}}],["актив",{"_index":538,"title":{},"content":{"42":{"position":[[944,7]]}},"keywords":{}}],["активн",{"_index":222,"title":{},"content":{"24":{"position":[[65,8]]}},"keywords":{}}],["алгоритм",{"_index":833,"title":{"73":{"position":[[0,8]]}},"content":{},"keywords":{}}],["архитектур",{"_index":14,"title":{},"content":{"1":{"position":[[6,11]]}},"keywords":{}}],["архитектурн",{"_index":577,"title":{},"content":{"45":{"position":[[1457,13]]}},"keywords":{}}],["асинхрон",{"_index":854,"title":{},"content":{"73":{"position":[[2828,11]]}},"keywords":{}}],["астра",{"_index":22,"title":{},"content":{"1":{"position":[[119,6]]}},"keywords":{}}],["аутентификац",{"_index":114,"title":{},"content":{"5":{"position":[[190,15]]}},"keywords":{}}],["базов",{"_index":313,"title":{},"content":{"27":{"position":[[766,7]]}},"keywords":{}}],["баланс",{"_index":680,"title":{},"content":{"59":{"position":[[1556,6]]}},"keywords":{}}],["библиотек",{"_index":917,"title":{},"content":{"76":{"position":[[61,10]]}},"keywords":{}}],["бизнес",{"_index":72,"title":{},"content":{"4":{"position":[[59,6]]},"5":{"position":[[57,6]]},"39":{"position":[[166,6]]},"41":{"position":[[472,6]]}},"keywords":{}}],["блокир",{"_index":585,"title":{},"content":{"46":{"position":[[67,12]]},"59":{"position":[[1930,9]]},"61":{"position":[[125,9]]}},"keywords":{}}],["блокировк",{"_index":290,"title":{},"content":{"26":{"position":[[97,10]]},"41":{"position":[[336,10]]},"61":{"position":[[336,10]]}},"keywords":{}}],["блокировок",{"_index":48,"title":{},"content":{"3":{"position":[[229,10]]}},"keywords":{}}],["большинств",{"_index":293,"title":{},"content":{"27":{"position":[[62,11]]}},"keywords":{}}],["бэкенд",{"_index":29,"title":{"3":{"position":[[36,7]]},"4":{"position":[[17,8]]},"5":{"position":[[17,8]]}},"content":{"5":{"position":[[233,7]]}},"keywords":{}}],["вдохновл",{"_index":24,"title":{"2":{"position":[[0,11]]}},"content":{},"keywords":{}}],["взаимодейств",{"_index":486,"title":{},"content":{"38":{"position":[[133,15]]}},"keywords":{}}],["взрывн",{"_index":586,"title":{},"content":{"46":{"position":[[109,9]]},"47":{"position":[[984,8]]}},"keywords":{}}],["вид",{"_index":449,"title":{},"content":{"32":{"position":[[55,4]]},"44":{"position":[[36,5]]},"45":{"position":[[933,5]]}},"keywords":{}}],["видн",{"_index":84,"title":{},"content":{"4":{"position":[[227,6]]},"47":{"position":[[924,5]]},"65":{"position":[[199,5]]}},"keywords":{}}],["влия",{"_index":717,"title":{},"content":{"61":{"position":[[326,6]]}},"keywords":{}}],["вложен",{"_index":780,"title":{"67":{"position":[[0,9]]}},"content":{"67":{"position":[[86,9],[162,11]]},"69":{"position":[[303,9]]}},"keywords":{}}],["вне",{"_index":628,"title":{},"content":{"52":{"position":[[18,3]]}},"keywords":{}}],["внутр",{"_index":105,"title":{},"content":{"4":{"position":[[658,6]]},"34":{"position":[[435,6]]},"36":{"position":[[78,6]]},"43":{"position":[[30,6]]}},"keywords":{}}],["возвраща",{"_index":546,"title":{},"content":{"44":{"position":[[18,10]]},"62":{"position":[[106,10]]}},"keywords":{}}],["возможн",{"_index":358,"title":{},"content":{"30":{"position":[[1175,11]]},"38":{"position":[[2070,11]]},"41":{"position":[[364,11]]},"54":{"position":[[1699,11],[2693,11]]},"58":{"position":[[932,11]]},"61":{"position":[[984,11]]},"67":{"position":[[138,11]]},"73":{"position":[[501,11]]}},"keywords":{}}],["возникнет",{"_index":296,"title":{},"content":{"27":{"position":[[206,9]]}},"keywords":{}}],["возраст",{"_index":630,"title":{},"content":{"54":{"position":[[47,7],[93,9],[157,7],[203,9],[377,8]]},"55":{"position":[[163,8]]},"74":{"position":[[760,10],[1012,7],[1121,7],[1160,7]]}},"keywords":{}}],["вопрос",{"_index":603,"title":{},"content":{"48":{"position":[[40,7]]}},"keywords":{}}],["времен",{"_index":520,"title":{},"content":{"41":{"position":[[274,9]]}},"keywords":{}}],["врод",{"_index":572,"title":{},"content":{"45":{"position":[[1373,5]]}},"keywords":{}}],["вход",{"_index":719,"title":{},"content":{"61":{"position":[[522,4]]}},"keywords":{}}],["входн",{"_index":484,"title":{},"content":{"38":{"position":[[43,7]]}},"keywords":{}}],["выбра",{"_index":677,"title":{},"content":{"59":{"position":[[1467,6]]}},"keywords":{}}],["вывод",{"_index":790,"title":{},"content":{"69":{"position":[[220,5]]}},"keywords":{}}],["выделя",{"_index":514,"title":{"41":{"position":[[4,8]]}},"content":{},"keywords":{}}],["выз",{"_index":676,"title":{},"content":{"59":{"position":[[1368,5]]},"73":{"position":[[2840,5],[4405,5],[4979,5]]},"74":{"position":[[174,5]]}},"keywords":{}}],["вызва",{"_index":258,"title":{},"content":{"24":{"position":[[916,7]]},"58":{"position":[[669,6]]},"73":{"position":[[3857,7]]}},"keywords":{}}],["вызов",{"_index":673,"title":{},"content":{"59":{"position":[[1325,6]]},"73":{"position":[[1376,7]]}},"keywords":{}}],["вызовет",{"_index":671,"title":{},"content":{"59":{"position":[[58,7]]}},"keywords":{}}],["вызыва",{"_index":682,"title":{"65":{"position":[[6,10]]}},"content":{"59":{"position":[[1632,8],[1847,10]]},"60":{"position":[[41,8]]},"61":{"position":[[42,10]]},"65":{"position":[[20,10]]},"67":{"position":[[116,8]]},"73":{"position":[[2773,8]]}},"keywords":{}}],["выполнен",{"_index":853,"title":{},"content":{"73":{"position":[[2738,10]]}},"keywords":{}}],["выполня",{"_index":600,"title":{},"content":{"47":{"position":[[1558,9]]}},"keywords":{}}],["высок",{"_index":311,"title":{},"content":{"27":{"position":[[673,8]]}},"keywords":{}}],["вычисл",{"_index":661,"title":{},"content":{"55":{"position":[[47,9],[141,9]]}},"keywords":{}}],["вычислен",{"_index":85,"title":{"49":{"position":[[20,10]]}},"content":{"4":{"position":[[242,10]]},"54":{"position":[[1149,10]]},"75":{"position":[[1314,10],[2091,10]]}},"keywords":{}}],["вычисля",{"_index":304,"title":{},"content":{"27":{"position":[[400,9]]},"49":{"position":[[22,9]]}},"keywords":{}}],["готов",{"_index":211,"title":{"22":{"position":[[0,7]]}},"content":{},"keywords":{}}],["группировкапр",{"_index":886,"title":{},"content":{"74":{"position":[[103,14]]}},"keywords":{}}],["дал",{"_index":554,"title":{},"content":{"44":{"position":[[269,6]]},"54":{"position":[[1072,5]]}},"keywords":{}}],["дальн",{"_index":479,"title":{},"content":{"37":{"position":[[691,10]]}},"keywords":{}}],["дан",{"_index":139,"title":{"13":{"position":[[11,7]]},"56":{"position":[[11,6]]},"57":{"position":[[30,6]]},"59":{"position":[[40,6]]},"62":{"position":[[28,7]]}},"content":{"21":{"position":[[236,6]]},"22":{"position":[[112,6]]},"27":{"position":[[92,8],[742,6]]},"28":{"position":[[169,6],[343,6],[480,6]]},"31":{"position":[[708,6],[1101,6]]},"32":{"position":[[83,7]]},"37":{"position":[[820,6]]},"38":{"position":[[1211,6],[1487,6],[2110,6]]},"41":{"position":[[126,6],[228,6]]},"42":{"position":[[125,6],[397,6],[630,6],[824,6]]},"47":{"position":[[104,6]]},"57":{"position":[[43,7]]},"58":{"position":[[64,6],[167,7]]},"59":{"position":[[77,6],[722,6],[998,6],[1204,6],[1459,6],[1523,6],[1618,7],[1711,7],[1879,6]]},"60":{"position":[[779,6]]},"61":{"position":[[74,6],[223,6],[304,6],[527,7],[1340,6]]},"62":{"position":[[77,7]]},"67":{"position":[[180,6]]},"69":{"position":[[1293,6]]},"74":{"position":[[741,6]]}},"keywords":{}}],["дат",{"_index":826,"title":{},"content":{"71":{"position":[[900,4]]},"74":{"position":[[973,4]]}},"keywords":{}}],["дебагингаувеличен",{"_index":507,"title":{},"content":{"38":{"position":[[2184,19]]}},"keywords":{}}],["действ",{"_index":110,"title":{},"content":{"4":{"position":[[808,9]]},"24":{"position":[[660,9]]},"43":{"position":[[917,9]]},"45":{"position":[[606,9]]},"47":{"position":[[1189,9],[1580,9]]},"48":{"position":[[125,9]]}},"keywords":{}}],["декомпозиц",{"_index":418,"title":{},"content":{"31":{"position":[[183,12]]}},"keywords":{}}],["дела",{"_index":789,"title":{},"content":{"69":{"position":[[213,6]]},"76":{"position":[[696,6],[1099,6]]}},"keywords":{}}],["дефолтн",{"_index":814,"title":{"70":{"position":[[10,9]]}},"content":{"70":{"position":[[41,9]]},"71":{"position":[[390,9]]}},"keywords":{}}],["директор",{"_index":459,"title":{},"content":{"34":{"position":[[26,10]]},"51":{"position":[[25,10]]}},"keywords":{}}],["добав",{"_index":92,"title":{},"content":{"4":{"position":[[423,8]]},"5":{"position":[[375,8]]},"24":{"position":[[2003,9]]},"30":{"position":[[35,8],[141,8],[1187,8],[2658,9]]},"42":{"position":[[479,8]]},"58":{"position":[[944,8]]},"73":{"position":[[513,8]]},"75":{"position":[[1359,9]]}},"keywords":{}}],["добавл",{"_index":381,"title":{},"content":{"30":{"position":[[2289,9]]},"75":{"position":[[559,9],[664,9],[1771,11]]},"76":{"position":[[649,11],[950,9]]}},"keywords":{}}],["добавлен",{"_index":4,"title":{},"content":{"0":{"position":[[49,10]]},"30":{"position":[[338,11]]},"42":{"position":[[315,11]]},"73":{"position":[[1846,10],[2482,12],[2571,12]]}},"keywords":{}}],["добавля",{"_index":618,"title":{},"content":{"49":{"position":[[41,11]]}},"keywords":{}}],["документ",{"_index":111,"title":{},"content":{"4":{"position":[[821,11]]},"24":{"position":[[22,9],[2013,8]]},"28":{"position":[[204,10],[489,11]]}},"keywords":{}}],["документ"",{"_index":76,"title":{},"content":{"4":{"position":[[99,14]]},"5":{"position":[[97,14]]},"28":{"position":[[35,14]]},"42":{"position":[[22,14],[244,14],[523,14],[684,14]]},"47":{"position":[[22,14]]}},"keywords":{}}],["документац",{"_index":3,"title":{},"content":{"0":{"position":[[32,12]]},"1":{"position":[[50,13]]},"22":{"position":[[119,13]]}},"keywords":{}}],["долж",{"_index":153,"title":{"46":{"position":[[14,6]]}},"content":{"17":{"position":[[160,6]]},"30":{"position":[[586,6]]},"32":{"position":[[20,6]]},"37":{"position":[[283,6]]},"41":{"position":[[94,6]]},"43":{"position":[[369,6]]},"46":{"position":[[15,6]]},"58":{"position":[[215,6]]},"59":{"position":[[18,6]]},"65":{"position":[[13,6]]},"73":{"position":[[4023,6],[4426,6],[5000,6]]}},"keywords":{}}],["должн",{"_index":18,"title":{},"content":{"1":{"position":[[64,6]]},"27":{"position":[[419,6],[571,6]]},"30":{"position":[[255,6]]},"31":{"position":[[223,6]]},"32":{"position":[[114,6]]},"36":{"position":[[160,6]]},"39":{"position":[[13,6]]},"54":{"position":[[329,6]]},"59":{"position":[[1765,6],[1895,6]]},"61":{"position":[[90,6]]},"65":{"position":[[55,6]]},"69":{"position":[[56,6]]}},"keywords":{}}],["дополнительн",{"_index":58,"title":{},"content":{"3":{"position":[[391,14]]},"4":{"position":[[347,13],[441,14]]},"5":{"position":[[421,14]]},"31":{"position":[[158,14],[486,14]]}},"keywords":{}}],["допустим",{"_index":885,"title":{},"content":{"74":{"position":[[93,9],[1050,13],[1182,13]]}},"keywords":{}}],["доск",{"_index":9,"title":{},"content":{"0":{"position":[[91,5]]}},"keywords":{}}],["достиг",{"_index":336,"title":{},"content":{"30":{"position":[[324,6]]}},"keywords":{}}],["достигнут",{"_index":385,"title":{},"content":{"30":{"position":[[2567,11]]},"73":{"position":[[2536,10]]},"75":{"position":[[1155,11]]}},"keywords":{}}],["достич",{"_index":747,"title":{},"content":{"65":{"position":[[142,7]]}},"keywords":{}}],["доступ",{"_index":44,"title":{"27":{"position":[[28,8]]},"29":{"position":[[26,7]]},"33":{"position":[[19,8]]},"38":{"position":[[0,6]]},"40":{"position":[[13,8]]},"49":{"position":[[31,9]]},"50":{"position":[[32,8]]},"56":{"position":[[22,8]]},"57":{"position":[[47,9]]},"63":{"position":[[14,7]]},"70":{"position":[[36,8]]},"72":{"position":[[22,8]]}},"content":{"3":{"position":[[173,9],[240,8],[432,9],[512,7]]},"4":{"position":[[253,7],[531,8],[798,7]]},"5":{"position":[[412,8]]},"19":{"position":[[46,8],[206,9],[245,8],[323,6]]},"20":{"position":[[81,8]]},"21":{"position":[[46,8],[89,8],[138,10]]},"24":{"position":[[651,6],[826,7]]},"27":{"position":[[10,8],[50,9],[165,7],[410,8],[533,7],[562,8],[599,10],[774,8]]},"28":{"position":[[261,6],[396,6],[617,7]]},"31":{"position":[[624,7],[732,7],[1001,7],[1125,7]]},"37":{"position":[[856,8]]},"38":{"position":[[97,9],[817,7],[1179,7],[1235,8],[1511,8]]},"39":{"position":[[217,9]]},"41":{"position":[[385,7]]},"42":{"position":[[147,6],[419,6]]},"43":{"position":[[908,6],[1104,6],[1142,6]]},"44":{"position":[[106,7]]},"45":{"position":[[597,6],[895,8],[1415,8],[1494,8]]},"47":{"position":[[1009,9],[1020,6],[1180,6]]},"48":{"position":[[109,6]]},"49":{"position":[[32,8]]},"54":{"position":[[1160,9]]},"55":{"position":[[67,7]]},"58":{"position":[[32,7]]},"59":{"position":[[328,7],[690,7],[746,8],[1022,8],[1756,8]]},"65":{"position":[[76,10],[222,9]]},"71":{"position":[[260,7],[358,6]]},"73":{"position":[[3885,7],[3938,8]]},"74":{"position":[[140,7]]},"75":{"position":[[234,8],[757,7],[1325,7],[1848,7],[2102,9]]},"76":{"position":[[1027,7]]}},"keywords":{}}],["доступа"",{"_index":830,"title":{},"content":{"71":{"position":[[973,13]]}},"keywords":{}}],["доступахлогик",{"_index":289,"title":{},"content":{"26":{"position":[[82,14]]}},"keywords":{}}],["доступеподход",{"_index":203,"title":{},"content":{"21":{"position":[[213,13]]}},"keywords":{}}],["доступн",{"_index":77,"title":{},"content":{"4":{"position":[[114,8]]},"5":{"position":[[112,8]]},"19":{"position":[[377,11]]},"24":{"position":[[32,8],[1751,9]]},"26":{"position":[[34,9]]},"28":{"position":[[50,8],[139,8]]},"30":{"position":[[100,9]]},"42":{"position":[[37,8],[259,8]]},"54":{"position":[[26,8],[82,10],[136,8],[192,10]]},"55":{"position":[[151,11]]},"65":{"position":[[272,9]]},"69":{"position":[[68,8],[226,8]]},"73":{"position":[[1507,8],[2014,9]]},"74":{"position":[[750,9],[1111,9]]},"76":{"position":[[717,9]]}},"keywords":{}}],["доступовзакрыт",{"_index":205,"title":{},"content":{"21":{"position":[[260,16]]}},"keywords":{}}],["доступовимет",{"_index":181,"title":{},"content":{"20":{"position":[[41,13]]}},"keywords":{}}],["доступовпричин",{"_index":288,"title":{},"content":{"26":{"position":[[57,15]]}},"keywords":{}}],["доступовтип",{"_index":287,"title":{},"content":{"26":{"position":[[21,12]]}},"keywords":{}}],["друг",{"_index":208,"title":{},"content":{"21":{"position":[[324,7]]},"30":{"position":[[1751,7]]},"39":{"position":[[29,4],[37,5]]},"58":{"position":[[691,7]]}},"keywords":{}}],["един",{"_index":120,"title":{"25":{"position":[[0,6]]},"38":{"position":[[25,6]]}},"content":{"5":{"position":[[386,6]]},"20":{"position":[[55,6]]},"38":{"position":[[36,6]]},"59":{"position":[[1433,7],[1495,7]]},"69":{"position":[[392,6]]}},"keywords":{}}],["заблокирова",{"_index":528,"title":{},"content":{"42":{"position":[[538,13],[747,13],[875,14]]}},"keywords":{}}],["завис",{"_index":531,"title":{},"content":{"42":{"position":[[619,7]]},"68":{"position":[[148,7]]}},"keywords":{}}],["зависет",{"_index":55,"title":{"46":{"position":[[21,8]]}},"content":{"3":{"position":[[352,8]]},"39":{"position":[[20,8]]},"46":{"position":[[31,8]]}},"keywords":{}}],["зависим",{"_index":326,"title":{},"content":{"28":{"position":[[523,11]]},"46":{"position":[[80,11]]}},"keywords":{}}],["загруж",{"_index":737,"title":{},"content":{"62":{"position":[[67,9]]}},"keywords":{}}],["загрузк",{"_index":204,"title":{},"content":{"21":{"position":[[227,8]]},"59":{"position":[[1514,8],[1609,8],[1702,8]]}},"keywords":{}}],["закр",{"_index":608,"title":{},"content":{"48":{"position":[[116,6],[180,6],[229,6]]},"66":{"position":[[12,7]]},"67":{"position":[[150,7]]}},"keywords":{}}],["закрыва",{"_index":170,"title":{},"content":{"19":{"position":[[313,9]]},"47":{"position":[[1170,9]]},"68":{"position":[[90,9]]},"69":{"position":[[1393,9]]},"71":{"position":[[348,9]]}},"keywords":{}}],["заполн",{"_index":825,"title":{},"content":{"71":{"position":[[890,9]]},"74":{"position":[[963,9]]}},"keywords":{}}],["запрашива",{"_index":714,"title":{},"content":{"61":{"position":[[209,13]]}},"keywords":{}}],["запреща",{"_index":544,"title":{},"content":{"43":{"position":[[1132,9]]}},"keywords":{}}],["запрос",{"_index":259,"title":{},"content":{"24":{"position":[[931,7]]},"57":{"position":[[82,9]]},"59":{"position":[[1828,10]]},"61":{"position":[[23,10],[158,7],[372,7]]}},"keywords":{}}],["запуска",{"_index":675,"title":{},"content":{"59":{"position":[[1358,9]]}},"keywords":{}}],["запута",{"_index":513,"title":{},"content":{"39":{"position":[[186,10]]}},"keywords":{}}],["затрат",{"_index":179,"title":{},"content":{"20":{"position":[[11,7]]}},"keywords":{}}],["зацепл",{"_index":329,"title":{},"content":{"28":{"position":[[748,9]]}},"keywords":{}}],["зацеплен",{"_index":298,"title":{"28":{"position":[[23,12]]}},"content":{"27":{"position":[[230,10],[498,10],[682,10]]},"28":{"position":[[226,11],[537,10],[577,10]]}},"keywords":{}}],["зацеплениеправ",{"_index":303,"title":{},"content":{"27":{"position":[[369,18]]}},"keywords":{}}],["защищ",{"_index":745,"title":{},"content":{"65":{"position":[[67,8]]}},"keywords":{}}],["знан",{"_index":87,"title":{},"content":{"4":{"position":[[286,6]]}},"keywords":{}}],["значительн",{"_index":716,"title":{},"content":{"61":{"position":[[311,11]]},"65":{"position":[[309,11]]}},"keywords":{}}],["избега",{"_index":559,"title":{},"content":{"45":{"position":[[875,8]]}},"keywords":{}}],["избежа",{"_index":308,"title":{},"content":{"27":{"position":[[489,8]]},"73":{"position":[[5422,8]]}},"keywords":{}}],["измен",{"_index":526,"title":{},"content":{"42":{"position":[[188,8]]}},"keywords":{}}],["изменен",{"_index":2,"title":{},"content":{"0":{"position":[[22,9]]},"41":{"position":[[218,9],[403,9]]}},"keywords":{}}],["имеют",{"_index":660,"title":{},"content":{"55":{"position":[[11,5]]}},"keywords":{}}],["имплементац",{"_index":465,"title":{},"content":{"34":{"position":[[386,13]]},"52":{"position":[[59,13]]}},"keywords":{}}],["имплементирова",{"_index":52,"title":{},"content":{"3":{"position":[[309,18]]}},"keywords":{}}],["импорт",{"_index":368,"title":{},"content":{"30":{"position":[[1740,7]]},"38":{"position":[[2236,7]]}},"keywords":{}}],["импортир",{"_index":322,"title":{},"content":{"28":{"position":[[288,11],[433,11]]}},"keywords":{}}],["импортиру",{"_index":328,"title":{},"content":{"28":{"position":[[660,10]]}},"keywords":{}}],["интерфейс",{"_index":51,"title":{},"content":{"3":{"position":[[279,11]]}},"keywords":{}}],["информац",{"_index":485,"title":{},"content":{"38":{"position":[[84,10]]}},"keywords":{}}],["информацион",{"_index":901,"title":{},"content":{"75":{"position":[[507,14],[1719,14]]},"76":{"position":[[597,14]]}},"keywords":{}}],["использ",{"_index":216,"title":{"75":{"position":[[22,13]]}},"content":{"22":{"position":[[88,12]]},"54":{"position":[[1116,10]]},"59":{"position":[[1743,12]]},"75":{"position":[[32,10]]}},"keywords":{}}],["использова",{"_index":19,"title":{"17":{"position":[[18,12]]}},"content":{"1":{"position":[[76,12]]},"3":{"position":[[493,12]]},"4":{"position":[[738,14]]},"17":{"position":[[19,12],[167,14]]},"27":{"position":[[306,12],[578,14]]},"30":{"position":[[1777,12]]},"39":{"position":[[292,12]]},"61":{"position":[[172,14],[486,12],[1401,12]]},"76":{"position":[[36,12]]}},"keywords":{}}],["использован",{"_index":102,"title":{"11":{"position":[[0,13]]},"12":{"position":[[0,13]]},"15":{"position":[[0,13]]},"30":{"position":[[7,14]]},"37":{"position":[[18,14]]},"45":{"position":[[20,13]]},"60":{"position":[[0,14]]}},"content":{"4":{"position":[[606,13]]},"38":{"position":[[1791,14]]},"45":{"position":[[1347,13]]},"59":{"position":[[1419,13],[1481,13],[1580,13]]},"61":{"position":[[409,13]]},"62":{"position":[[12,14],[362,13]]},"65":{"position":[[233,13]]},"67":{"position":[[1,13]]}},"keywords":{}}],["исследован",{"_index":749,"title":{},"content":{"65":{"position":[[174,12]]}},"keywords":{}}],["кажд",{"_index":446,"title":{"65":{"position":[[21,6]]}},"content":{"32":{"position":[[5,7]]},"59":{"position":[[86,6],[1276,7],[1374,6],[1393,7],[1645,6],[1667,7]]},"65":{"position":[[34,6],[119,7]]},"67":{"position":[[31,6],[79,6]]},"73":{"position":[[1077,7],[1249,7]]}},"keywords":{}}],["как",{"_index":666,"title":{"57":{"position":[[24,5]]}},"content":{},"keywords":{}}],["кейс",{"_index":842,"title":{},"content":{"73":{"position":[[1320,6],[1341,6],[1501,5],[1674,5],[1802,5],[2008,5],[2132,6],[3982,4],[4459,7],[4947,4],[5453,7]]},"74":{"position":[[215,6]]},"75":{"position":[[490,5],[704,5],[933,5],[1228,5],[1609,6]]}},"keywords":{}}],["клиент",{"_index":27,"title":{"3":{"position":[[3,7]]}},"content":{"3":{"position":[[462,7]]},"19":{"position":[[237,7],[274,7]]}},"keywords":{}}],["клиентеapi",{"_index":159,"title":{},"content":{"19":{"position":[[91,10]]}},"keywords":{}}],["клиентесист",{"_index":193,"title":{},"content":{"21":{"position":[[58,14]]}},"keywords":{}}],["клиентск",{"_index":121,"title":{},"content":{"5":{"position":[[393,10]]}},"keywords":{}}],["книг",{"_index":330,"title":{},"content":{"30":{"position":[[44,5],[121,5],[350,4],[443,4],[1205,5],[2603,4],[2668,5]]},"45":{"position":[[1287,5],[2151,5]]},"48":{"position":[[196,5]]},"54":{"position":[[20,5],[2715,5]]},"58":{"position":[[962,5]]},"61":{"position":[[2209,5]]},"69":{"position":[[31,5],[269,6]]},"73":{"position":[[531,5],[1208,5],[2084,4],[2201,5],[2678,4],[3662,5],[5133,4]]},"75":{"position":[[540,5],[1191,4],[1369,5],[1676,5],[1752,5]]},"76":{"position":[[338,5],[630,5]]}},"keywords":{}}],["книгепокупк",{"_index":632,"title":{},"content":{"54":{"position":[[116,12]]}},"keywords":{}}],["книгу"",{"_index":555,"title":{},"content":{"45":{"position":[[34,11]]}},"keywords":{}}],["кнопк",{"_index":74,"title":{},"content":{"4":{"position":[[78,6],[434,6]]},"5":{"position":[[76,6],[357,7]]},"28":{"position":[[13,6]]},"30":{"position":[[218,6]]},"42":{"position":[[1,6],[217,6],[502,6],[663,6],[846,6]]},"45":{"position":[[13,6]]},"47":{"position":[[1,6],[157,7]]}},"keywords":{}}],["кнопкедоступ",{"_index":597,"title":{},"content":{"47":{"position":[[1029,12]]}},"keywords":{}}],["код",{"_index":345,"title":{},"content":{"30":{"position":[[581,4],[1731,4]]},"31":{"position":[[566,5]]},"37":{"position":[[278,4]]},"38":{"position":[[392,4]]},"41":{"position":[[446,5]]},"43":{"position":[[364,4]]},"46":{"position":[[173,5]]},"54":{"position":[[559,4]]},"58":{"position":[[210,4]]},"59":{"position":[[116,4]]},"65":{"position":[[341,4]]},"73":{"position":[[1399,5],[5052,5]]}},"keywords":{}}],["количеств",{"_index":332,"title":{},"content":{"30":{"position":[[110,10],[432,10],[2592,10]]},"73":{"position":[[1835,10],[2073,10],[2471,10],[2560,10],[2667,10],[5122,10],[5437,10]]},"75":{"position":[[1006,10],[1180,10],[1970,10]]}},"keywords":{}}],["комментар",{"_index":448,"title":{},"content":{"32":{"position":[[41,11]]}},"keywords":{}}],["компаниицентрализова",{"_index":182,"title":{},"content":{"20":{"position":[[110,23]]}},"keywords":{}}],["компонент",{"_index":562,"title":{},"content":{"45":{"position":[[922,10],[1361,11]]},"71":{"position":[[218,9]]}},"keywords":{}}],["конкретн",{"_index":202,"title":{},"content":{"21":{"position":[[185,10]]},"27":{"position":[[183,11]]},"43":{"position":[[1151,10]]},"47":{"position":[[146,10]]},"62":{"position":[[126,10]]},"68":{"position":[[100,10]]},"71":{"position":[[232,10]]}},"keywords":{}}],["контекст",{"_index":49,"title":{},"content":{"3":{"position":[[251,9]]}},"keywords":{}}],["контрол",{"_index":100,"title":{},"content":{"4":{"position":[[575,9]]},"27":{"position":[[1,8]]}},"keywords":{}}],["конфигурац",{"_index":751,"title":{},"content":{"65":{"position":[[247,12]]}},"keywords":{}}],["концентрац",{"_index":291,"title":{"27":{"position":[[8,12]]}},"content":{},"keywords":{}}],["концептуальн",{"_index":34,"title":{},"content":{"3":{"position":[[39,13]]},"36":{"position":[[244,13],[354,13]]}},"keywords":{}}],["концепц",{"_index":578,"title":{},"content":{"45":{"position":[[1471,10]]}},"keywords":{}}],["котор",{"_index":333,"title":{},"content":{"30":{"position":[[127,7]]}},"keywords":{}}],["куп",{"_index":734,"title":{},"content":{"61":{"position":[[2201,7]]}},"keywords":{}}],["либ",{"_index":8,"title":{},"content":{"0":{"position":[[83,4],[114,4]]},"19":{"position":[[33,4]]}},"keywords":{}}],["лк"",{"_index":828,"title":{},"content":{"71":{"position":[[916,8]]}},"keywords":{}}],["логик",{"_index":96,"title":{"27":{"position":[[21,6]]},"39":{"position":[[18,6]]},"50":{"position":[[25,6]]}},"content":{"4":{"position":[[524,6]]},"5":{"position":[[436,6]]},"24":{"position":[[924,6]]},"26":{"position":[[1,6]]},"27":{"position":[[543,6],[655,6]]},"28":{"position":[[300,6],[445,6],[671,6]]},"39":{"position":[[197,6],[276,7]]},"45":{"position":[[1408,6]]},"54":{"position":[[361,6]]},"75":{"position":[[76,6]]}},"keywords":{}}],["логирован",{"_index":506,"title":{},"content":{"38":{"position":[[2168,11]]}},"keywords":{}}],["люб",{"_index":169,"title":{},"content":{"19":{"position":[[304,8]]}},"keywords":{}}],["максимальн",{"_index":341,"title":{},"content":{"30":{"position":[[419,12],[2579,12]]},"73":{"position":[[2060,12],[2547,12],[2654,12],[5109,12]]},"75":{"position":[[993,12],[1167,12],[1957,12]]}},"keywords":{}}],["медлен",{"_index":686,"title":{},"content":{"59":{"position":[[1907,10]]},"61":{"position":[[102,10]]}},"keywords":{}}],["мест",{"_index":740,"title":{},"content":{"62":{"position":[[356,5]]}},"keywords":{}}],["местоположен",{"_index":457,"title":{"34":{"position":[[0,15]]},"51":{"position":[[0,15]]},"64":{"position":[[0,15]]}},"content":{},"keywords":{}}],["метод",{"_index":480,"title":{"49":{"position":[[8,7]]}},"content":{"37":{"position":[[799,5]]},"43":{"position":[[54,6]]},"49":{"position":[[5,8]]},"57":{"position":[[26,5]]},"59":{"position":[[31,5],[1291,5],[1441,6],[1503,6],[1696,5],[1860,7]]},"61":{"position":[[55,7],[499,7]]}},"keywords":{}}],["мним",{"_index":300,"title":{},"content":{"27":{"position":[[264,5]]}},"keywords":{}}],["модалк",{"_index":280,"title":{},"content":{"24":{"position":[[1902,7]]},"30":{"position":[[272,7]]},"47":{"position":[[1057,7]]},"75":{"position":[[720,7],[1811,7]]},"76":{"position":[[990,7]]}},"keywords":{}}],["модельюapi",{"_index":164,"title":{},"content":{"19":{"position":[[170,10]]}},"keywords":{}}],["модул",{"_index":286,"title":{"26":{"position":[[19,7]]},"27":{"position":[[45,7]]},"36":{"position":[[28,8]]},"52":{"position":[[26,6]]}},"content":{"27":{"position":[[139,8],[195,7],[291,8],[328,8],[473,6]]},"28":{"position":[[239,6],[310,6],[366,6],[455,6],[554,9],[589,6],[681,7],[711,6]]},"30":{"position":[[1759,6]]},"31":{"position":[[878,7]]},"36":{"position":[[270,6],[380,6]]},"38":{"position":[[115,6]]},"52":{"position":[[34,6]]},"65":{"position":[[290,6]]}},"keywords":{}}],["модулейпричин",{"_index":309,"title":{},"content":{"27":{"position":[[509,14]]}},"keywords":{}}],["модулямидоступ",{"_index":299,"title":{},"content":{"27":{"position":[[247,16]]}},"keywords":{}}],["может",{"_index":32,"title":{},"content":{"3":{"position":[[18,6]]}},"keywords":{}}],["мок",{"_index":914,"title":{"76":{"position":[[0,3]]}},"content":{},"keywords":{}}],["молод",{"_index":733,"title":{},"content":{"61":{"position":[[2155,9]]}},"keywords":{}}],["момент",{"_index":791,"title":{},"content":{"69":{"position":[[280,6]]}},"keywords":{}}],["мотивац",{"_index":504,"title":{},"content":{"38":{"position":[[2059,9]]},"59":{"position":[[1409,9]]},"73":{"position":[[5401,9]]}},"keywords":{}}],["мотивациявыз",{"_index":746,"title":{},"content":{"65":{"position":[[88,14]]}},"keywords":{}}],["нажат",{"_index":119,"title":{},"content":{"5":{"position":[[341,7]]},"30":{"position":[[207,7]]}},"keywords":{}}],["назван",{"_index":471,"title":{},"content":{"36":{"position":[[183,8]]},"48":{"position":[[1,8]]}},"keywords":{}}],["найдена"",{"_index":774,"title":{},"content":{"66":{"position":[[1034,13]]}},"keywords":{}}],["налич",{"_index":107,"title":{},"content":{"4":{"position":[[701,7]]}},"keywords":{}}],["например",{"_index":209,"title":{},"content":{"21":{"position":[[343,9]]},"24":{"position":[[1871,9]]}},"keywords":{}}],["напрям",{"_index":64,"title":{"36":{"position":[[9,8]]}},"content":{"3":{"position":[[535,8]]},"46":{"position":[[22,8]]}},"keywords":{}}],["наруша",{"_index":576,"title":{},"content":{"45":{"position":[[1448,8]]}},"keywords":{}}],["наход",{"_index":458,"title":{},"content":{"34":{"position":[[14,9],[425,9]]},"51":{"position":[[13,9]]}},"keywords":{}}],["начал",{"_index":852,"title":{},"content":{"73":{"position":[[2730,7]]}},"keywords":{}}],["наш",{"_index":440,"title":{},"content":{"31":{"position":[[871,6]]}},"keywords":{}}],["небольш",{"_index":781,"title":{},"content":{"67":{"position":[[55,9]]}},"keywords":{}}],["неверн",{"_index":90,"title":{},"content":{"4":{"position":[[405,8]]}},"keywords":{}}],["недостаточн",{"_index":435,"title":{},"content":{"31":{"position":[[695,12],[1088,12]]}},"keywords":{}}],["недоступн",{"_index":627,"title":{},"content":{"52":{"position":[[7,10]]},"73":{"position":[[1680,11],[1808,11],[3899,11],[3987,11]]},"76":{"position":[[1120,11]]}},"keywords":{}}],["нежелательн",{"_index":297,"title":{"28":{"position":[[9,13]]}},"content":{"27":{"position":[[216,13],[355,13]]}},"keywords":{}}],["нейминг",{"_index":601,"title":{"48":{"position":[[0,8]]},"49":{"position":[[0,7]]},"55":{"position":[[0,8]]}},"content":{},"keywords":{}}],["необходим",{"_index":62,"title":{"19":{"position":[[0,10]]}},"content":{"3":{"position":[[470,10]]},"4":{"position":[[336,10],[755,11]]},"19":{"position":[[282,10]]},"24":{"position":[[895,14]]},"27":{"position":[[109,10]]},"30":{"position":[[368,10],[1766,10]]},"31":{"position":[[97,10],[820,10]]},"37":{"position":[[827,11]]},"38":{"position":[[417,10],[2225,10]]},"39":{"position":[[248,10]]},"45":{"position":[[864,10]]},"47":{"position":[[1499,10],[1568,11]]},"54":{"position":[[400,10],[564,10]]},"58":{"position":[[131,10]]},"59":{"position":[[141,10]]},"60":{"position":[[30,10]]},"61":{"position":[[1,10],[475,10]]},"62":{"position":[[308,13]]},"66":{"position":[[1,10]]},"67":{"position":[[105,10]]},"68":{"position":[[44,10]]},"69":{"position":[[1343,10]]},"73":{"position":[[1047,10],[1096,10],[1268,10],[2755,10],[3947,10]]},"74":{"position":[[24,11]]},"75":{"position":[[169,10]]},"76":{"position":[[25,10]]}},"keywords":{}}],["неправильн",{"_index":591,"title":{},"content":{"47":{"position":[[166,12]]}},"keywords":{}}],["непредвиден",{"_index":907,"title":{},"content":{"75":{"position":[[1288,14],[2065,14]]}},"keywords":{}}],["нов",{"_index":5,"title":{},"content":{"0":{"position":[[60,5]]}},"keywords":{}}],["нуж",{"_index":28,"title":{"3":{"position":[[11,5]]}},"content":{},"keywords":{}}],["нужн",{"_index":42,"title":{"57":{"position":[[37,5]]}},"content":{"3":{"position":[[153,5]]},"57":{"position":[[59,5]]},"61":{"position":[[230,5]]}},"keywords":{}}],["обернут",{"_index":683,"title":{},"content":{"59":{"position":[[1783,8]]}},"keywords":{}}],["област",{"_index":68,"title":{},"content":{"4":{"position":[[12,7]]},"5":{"position":[[12,7]]},"36":{"position":[[48,7]]}},"keywords":{}}],["обрабатыва",{"_index":818,"title":{},"content":{"71":{"position":[[377,12]]},"73":{"position":[[4433,14]]}},"keywords":{}}],["обработа",{"_index":257,"title":{},"content":{"24":{"position":[[860,10]]},"62":{"position":[[322,10]]},"68":{"position":[[322,10]]},"69":{"position":[[1264,10]]},"70":{"position":[[30,10]]},"73":{"position":[[1279,10]]}},"keywords":{}}],["обработк",{"_index":735,"title":{"62":{"position":[[0,9]]},"70":{"position":[[0,9]]}},"content":{},"keywords":{}}],["объедин",{"_index":439,"title":{},"content":{"31":{"position":[[831,10]]}},"keywords":{}}],["объект",{"_index":547,"title":{},"content":{"44":{"position":[[29,6]]},"62":{"position":[[117,6]]}},"keywords":{}}],["огранич",{"_index":515,"title":{},"content":{"41":{"position":[[106,9]]}},"keywords":{}}],["ограничен",{"_index":518,"title":{},"content":{"41":{"position":[[185,11]]},"42":{"position":[[97,11],[369,11]]},"67":{"position":[[187,11]]}},"keywords":{}}],["одинаков",{"_index":596,"title":{},"content":{"47":{"position":[[998,10]]}},"keywords":{}}],["одн",{"_index":186,"title":{"27":{"position":[[39,5]]},"31":{"position":[[23,5]]}},"content":{"20":{"position":[[171,5]]},"27":{"position":[[467,5]]},"31":{"position":[[1,4],[118,5]]},"54":{"position":[[348,4]]},"73":{"position":[[4448,5]]}},"keywords":{}}],["одновремен",{"_index":669,"title":{},"content":{"58":{"position":[[676,12]]}},"keywords":{}}],["однозначн",{"_index":45,"title":{},"content":{"3":{"position":[[191,10]]}},"keywords":{}}],["онлайн",{"_index":611,"title":{},"content":{"48":{"position":[[202,6]]},"54":{"position":[[2721,6]]}},"keywords":{}}],["описа",{"_index":17,"title":{},"content":{"1":{"position":[[38,9]]},"73":{"position":[[5042,7]]}},"keywords":{}}],["описан",{"_index":752,"title":{},"content":{"65":{"position":[[262,9]]}},"keywords":{}}],["описыва",{"_index":172,"title":{},"content":{"19":{"position":[[367,9]]}},"keywords":{}}],["оплат",{"_index":175,"title":{},"content":{"19":{"position":[[446,10]]},"30":{"position":[[298,7]]},"42":{"position":[[460,8]]},"54":{"position":[[1711,8]]},"61":{"position":[[996,8]]},"71":{"position":[[745,8]]},"75":{"position":[[728,7],[1819,7]]},"76":{"position":[[998,7]]}},"keywords":{}}],["оплата...)описа",{"_index":517,"title":{},"content":{"41":{"position":[[165,19]]}},"keywords":{}}],["оплач",{"_index":115,"title":{},"content":{"5":{"position":[[253,7]]},"30":{"position":[[183,7]]},"31":{"position":[[400,7]]},"61":{"position":[[2028,11]]},"73":{"position":[[1708,7],[2037,7],[2410,9],[2631,7],[4015,7],[4154,9],[5086,7]]}},"keywords":{}}],["оплаченпревыш",{"_index":331,"title":{},"content":{"30":{"position":[[83,16]]}},"keywords":{}}],["определен",{"_index":174,"title":{},"content":{"19":{"position":[[405,12]]},"73":{"position":[[1024,12]]}},"keywords":{}}],["определя",{"_index":667,"title":{},"content":{"57":{"position":[[15,10]]}},"keywords":{}}],["оптимальн",{"_index":718,"title":{},"content":{"61":{"position":[[392,12]]}},"keywords":{}}],["оптимизац",{"_index":681,"title":{"61":{"position":[[0,11]]}},"content":{"59":{"position":[[1596,12]]}},"keywords":{}}],["организац",{"_index":82,"title":{},"content":{"4":{"position":[[189,12],[391,12],[471,12]]},"28":{"position":[[176,11],[353,12]]},"41":{"position":[[152,12]]},"42":{"position":[[327,12],[488,12]]},"48":{"position":[[249,12]]}},"keywords":{}}],["организации.docact",{"_index":108,"title":{},"content":{"4":{"position":[[709,22]]}},"keywords":{}}],["организацию"",{"_index":318,"title":{},"content":{"28":{"position":[[121,17]]}},"keywords":{}}],["организациякнопк",{"_index":316,"title":{},"content":{"28":{"position":[[89,17]]}},"keywords":{}}],["основ",{"_index":516,"title":{},"content":{"41":{"position":[[119,6]]},"47":{"position":[[1547,6]]},"68":{"position":[[201,6]]},"69":{"position":[[191,6]]}},"keywords":{}}],["основыва",{"_index":524,"title":{},"content":{"42":{"position":[[109,12],[381,12],[808,12]]}},"keywords":{}}],["оставл",{"_index":447,"title":{},"content":{"32":{"position":[[32,8]]}},"keywords":{}}],["ответствен",{"_index":721,"title":{},"content":{"61":{"position":[[1353,12]]}},"keywords":{}}],["отвеча",{"_index":602,"title":{},"content":{"48":{"position":[[28,8]]},"59":{"position":[[1211,8]]}},"keywords":{}}],["отдельн",{"_index":154,"title":{},"content":{"17":{"position":[[182,8]]},"59":{"position":[[1686,9]]},"73":{"position":[[1117,9]]}},"keywords":{}}],["отказ",{"_index":195,"title":{"29":{"position":[[17,6]]},"70":{"position":[[27,6]]}},"content":{"21":{"position":[[80,6],[204,6]]},"26":{"position":[[73,6]]},"27":{"position":[[524,6],[646,6]]},"31":{"position":[[22,6],[519,7]]},"38":{"position":[[2215,6]]},"44":{"position":[[97,6],[254,6]]},"68":{"position":[[353,7]]},"69":{"position":[[1283,7],[1321,6]]},"70":{"position":[[63,7]]},"71":{"position":[[251,6],[408,6]]},"73":{"position":[[3929,6]]},"74":{"position":[[131,6]]},"75":{"position":[[226,5]]}},"keywords":{}}],["отказа",{"_index":903,"title":{},"content":{"75":{"position":[[746,8],[1837,8]]},"76":{"position":[[1016,8]]}},"keywords":{}}],["отказыва",{"_index":256,"title":{},"content":{"24":{"position":[[813,10]]}},"keywords":{}}],["откр",{"_index":335,"title":{},"content":{"30":{"position":[[262,9]]},"42":{"position":[[174,8],[446,8]]},"74":{"position":[[1093,7]]}},"keywords":{}}],["открыва",{"_index":902,"title":{},"content":{"75":{"position":[[710,9]]}},"keywords":{}}],["открыт",{"_index":279,"title":{},"content":{"24":{"position":[[1893,8]]},"41":{"position":[[376,8]]}},"keywords":{}}],["открыт/закр",{"_index":605,"title":{},"content":{"48":{"position":[[61,13]]}},"keywords":{}}],["отлича",{"_index":35,"title":{},"content":{"3":{"position":[[53,10]]}},"keywords":{}}],["относ",{"_index":472,"title":{},"content":{"36":{"position":[[258,9],[368,9]]}},"keywords":{}}],["относя",{"_index":301,"title":{},"content":{"27":{"position":[[270,11]]}},"keywords":{}}],["отобража",{"_index":557,"title":{},"content":{"45":{"position":[[56,12]]},"47":{"position":[[37,12]]}},"keywords":{}}],["отобраз",{"_index":338,"title":{},"content":{"30":{"position":[[379,10]]}},"keywords":{}}],["отрендер",{"_index":815,"title":{},"content":{"71":{"position":[[206,11]]}},"keywords":{}}],["отрицательн",{"_index":841,"title":{},"content":{"73":{"position":[[1306,13]]},"74":{"position":[[69,13]]}},"keywords":{}}],["ошибк",{"_index":431,"title":{},"content":{"31":{"position":[[642,6],[1019,6]]},"75":{"position":[[964,8],[1259,8],[1303,6],[1928,8],[2036,8],[2080,6]]}},"keywords":{}}],["ошибок",{"_index":187,"title":{},"content":{"20":{"position":[[186,6]]},"31":{"position":[[557,6]]}},"keywords":{}}],["пакет",{"_index":212,"title":{"22":{"position":[[8,5]]}},"content":{"22":{"position":[[53,5]]},"31":{"position":[[451,5]]},"53":{"position":[[41,6]]}},"keywords":{}}],["панел",{"_index":806,"title":{},"content":{"69":{"position":[[1047,7]]}},"keywords":{}}],["паттерн",{"_index":124,"title":{"6":{"position":[[18,8]]},"20":{"position":[[11,8]]},"21":{"position":[[0,7]]}},"content":{"19":{"position":[[134,7],[216,7]]},"22":{"position":[[29,8]]}},"keywords":{}}],["паттернизбежа",{"_index":184,"title":{},"content":{"20":{"position":[[144,15]]}},"keywords":{}}],["перезагруз",{"_index":386,"title":{},"content":{"30":{"position":[[2702,13]]},"61":{"position":[[2234,13]]},"75":{"position":[[1403,13]]}},"keywords":{}}],["переиспольз",{"_index":415,"title":{},"content":{"31":{"position":[[29,16]]}},"keywords":{}}],["переиспользова",{"_index":305,"title":{},"content":{"27":{"position":[[431,17]]},"39":{"position":[[60,16],[259,16]]}},"keywords":{}}],["переиспользован",{"_index":509,"title":{"39":{"position":[[0,17]]},"50":{"position":[[7,17]]}},"content":{"39":{"position":[[98,17]]}},"keywords":{}}],["перенос",{"_index":574,"title":{},"content":{"45":{"position":[[1398,9]]}},"keywords":{}}],["пересечен",{"_index":512,"title":{},"content":{"39":{"position":[[154,11]]}},"keywords":{}}],["перманентн",{"_index":63,"title":{},"content":{"3":{"position":[[481,11]]}},"keywords":{}}],["писа",{"_index":836,"title":{},"content":{"73":{"position":[[1058,6]]}},"keywords":{}}],["платн",{"_index":79,"title":{},"content":{"4":{"position":[[142,7]]},"5":{"position":[[140,7]]},"42":{"position":[[295,7]]}},"keywords":{}}],["повторен",{"_index":185,"title":{},"content":{"20":{"position":[[160,10]]}},"keywords":{}}],["подготавлива",{"_index":497,"title":{},"content":{"38":{"position":[[1472,14]]},"59":{"position":[[983,14]]}},"keywords":{}}],["подготов",{"_index":493,"title":{"59":{"position":[[29,10]]}},"content":{"38":{"position":[[1199,11]]},"59":{"position":[[710,11]]}},"keywords":{}}],["подготовк",{"_index":138,"title":{"13":{"position":[[0,10]]},"56":{"position":[[0,10]]}},"content":{"27":{"position":[[731,10]]},"37":{"position":[[809,10]]},"38":{"position":[[2099,10]]},"57":{"position":[[32,10]]},"59":{"position":[[66,10],[1193,10],[1297,10],[1448,10],[1868,10]]},"61":{"position":[[63,10]]}},"keywords":{}}],["подготовл",{"_index":713,"title":{},"content":{"60":{"position":[[819,13]]}},"keywords":{}}],["поддержива",{"_index":190,"title":{},"content":{"21":{"position":[[11,14]]},"73":{"position":[[2815,12]]}},"keywords":{}}],["поддержк",{"_index":215,"title":{},"content":{"22":{"position":[[19,9]]},"46":{"position":[[163,9]]},"65":{"position":[[159,10],[357,9]]},"67":{"position":[[233,10]]}},"keywords":{}}],["подключен",{"_index":315,"title":{},"content":{"28":{"position":[[76,12]]}},"keywords":{}}],["подм",{"_index":915,"title":{},"content":{"76":{"position":[[5,7]]}},"keywords":{}}],["подобласт",{"_index":468,"title":{},"content":{"36":{"position":[[26,10],[123,10]]}},"keywords":{}}],["подход",{"_index":678,"title":{},"content":{"59":{"position":[[1474,6]]},"69":{"position":[[327,8]]}},"keywords":{}}],["позвол",{"_index":307,"title":{},"content":{"27":{"position":[[480,8]]},"37":{"position":[[680,8]]}},"keywords":{}}],["позволя",{"_index":177,"title":{"20":{"position":[[20,10]]}},"content":{"21":{"position":[[98,9]]},"27":{"position":[[388,11]]},"38":{"position":[[1189,9]]},"59":{"position":[[700,9]]},"65":{"position":[[132,9]]},"68":{"position":[[274,11]]},"69":{"position":[[1254,9]]},"71":{"position":[[196,9]]},"73":{"position":[[5412,9]]}},"keywords":{}}],["показа",{"_index":812,"title":{},"content":{"69":{"position":[[1354,8]]}},"keywords":{}}],["показыва",{"_index":900,"title":{},"content":{"75":{"position":[[496,10],[939,10],[1234,10]]}},"keywords":{}}],["покр",{"_index":883,"title":{},"content":{"74":{"position":[[37,7]]}},"keywords":{}}],["покрыва",{"_index":888,"title":{},"content":{"74":{"position":[[195,9]]}},"keywords":{}}],["покрыт",{"_index":834,"title":{"73":{"position":[[9,8]]}},"content":{},"keywords":{}}],["политик",{"_index":456,"title":{"33":{"position":[[10,8]]},"35":{"position":[[9,8]]},"36":{"position":[[0,8]]},"38":{"position":[[9,9]]}},"content":{"34":{"position":[[5,8]]},"37":{"position":[[662,9]]}},"keywords":{}}],["полк",{"_index":282,"title":{},"content":{"24":{"position":[[2025,5]]},"30":{"position":[[58,6],[153,5],[358,6],[1199,5],[2302,8],[2611,7],[2677,5]]},"58":{"position":[[956,5]]},"73":{"position":[[525,5],[1217,7],[2092,5],[2210,7],[2686,7],[3671,7],[5141,7]]},"75":{"position":[[677,8],[1199,7],[1378,5],[1685,7]]},"76":{"position":[[347,7],[963,8]]}},"keywords":{}}],["полке"",{"_index":342,"title":{},"content":{"30":{"position":[[451,12]]}},"keywords":{}}],["полку</button>",{"_index":407,"title":{},"content":{"30":{"position":[[3307,20]]}},"keywords":{}}],["полку"",{"_index":334,"title":{},"content":{"30":{"position":[[243,11]]}},"keywords":{}}],["положительн",{"_index":840,"title":{},"content":{"73":{"position":[[1290,13]]},"74":{"position":[[53,13]]}},"keywords":{}}],["получ",{"_index":668,"title":{},"content":{"58":{"position":[[154,8]]}},"keywords":{}}],["получа",{"_index":201,"title":{},"content":{"21":{"position":[[176,8]]},"27":{"position":[[120,8]]},"28":{"position":[[502,8]]}},"keywords":{}}],["получен",{"_index":166,"title":{"62":{"position":[[18,9]]}},"content":{"19":{"position":[[254,10]]},"38":{"position":[[74,9]]},"61":{"position":[[1330,9]]}},"keywords":{}}],["пользовател",{"_index":78,"title":{},"content":{"4":{"position":[[127,12],[300,12],[378,12],[686,12]]},"5":{"position":[[125,12],[272,13]]},"21":{"position":[[149,12]]},"24":{"position":[[942,12]]},"30":{"position":[[13,12],[167,12],[311,12]]},"31":{"position":[[1191,12]]},"41":{"position":[[235,12]]},"42":{"position":[[132,12],[202,13],[279,13],[404,12],[637,13],[703,13],[831,13]]},"45":{"position":[[81,12]]},"47":{"position":[[62,12]]},"54":{"position":[[55,12],[165,12],[386,13]]},"69":{"position":[[238,12]]},"74":{"position":[[947,12],[1020,12],[1145,12]]}},"keywords":{}}],["пользовательск",{"_index":50,"title":{},"content":{"3":{"position":[[261,17]]}},"keywords":{}}],["пользователя)услов",{"_index":522,"title":{},"content":{"41":{"position":[[418,20]]}},"keywords":{}}],["помощ",{"_index":541,"title":{},"content":{"43":{"position":[[46,7]]},"53":{"position":[[19,7]]}},"keywords":{}}],["пониман",{"_index":754,"title":{},"content":{"65":{"position":[[331,9]]}},"keywords":{}}],["попроб",{"_index":283,"title":{},"content":{"24":{"position":[[2039,10]]},"30":{"position":[[2691,10]]},"61":{"position":[[2223,10]]},"75":{"position":[[1392,10]]}},"keywords":{}}],["пород",{"_index":302,"title":{},"content":{"27":{"position":[[347,7]]}},"keywords":{}}],["послед",{"_index":98,"title":{},"content":{"4":{"position":[[556,11]]}},"keywords":{}}],["последств",{"_index":587,"title":{},"content":{"46":{"position":[[141,11]]}},"keywords":{}}],["посредств",{"_index":540,"title":{"43":{"position":[[21,11]]}},"content":{"58":{"position":[[706,11]]}},"keywords":{}}],["потер",{"_index":99,"title":{},"content":{"4":{"position":[[568,6]]}},"keywords":{}}],["поэт",{"_index":467,"title":{},"content":{"34":{"position":[[417,7]]},"36":{"position":[[143,7],[293,7],[394,7]]},"69":{"position":[[374,7]]},"75":{"position":[[151,7]]}},"keywords":{}}],["прав",{"_index":6,"title":{},"content":{"0":{"position":[[66,6]]},"27":{"position":[[458,6]]},"51":{"position":[[5,7]]}},"keywords":{}}],["правильн",{"_index":101,"title":{},"content":{"4":{"position":[[586,10]]},"47":{"position":[[1081,10]]}},"keywords":{}}],["превыш",{"_index":843,"title":{},"content":{"73":{"position":[[1825,9],[2050,9],[2461,9],[2644,9],[5099,9]]},"75":{"position":[[983,9],[1947,9]]}},"keywords":{}}],["предел",{"_index":337,"title":{},"content":{"30":{"position":[[331,6]]}},"keywords":{}}],["предложен",{"_index":1,"title":{},"content":{"0":{"position":[[7,11]]},"30":{"position":[[282,12]]}},"keywords":{}}],["предмет",{"_index":47,"title":{},"content":{"3":{"position":[[221,7]]}},"keywords":{}}],["предметн",{"_index":67,"title":{},"content":{"4":{"position":[[1,10]]},"5":{"position":[[1,10]]},"36":{"position":[[15,10],[37,10],[112,10]]}},"keywords":{}}],["предназначен",{"_index":451,"title":{},"content":{"32":{"position":[[68,14]]}},"keywords":{}}],["предоставля",{"_index":151,"title":{"21":{"position":[[8,14]]}},"content":{"17":{"position":[[88,13]]},"19":{"position":[[102,13],[181,13]]}},"keywords":{}}],["префикс",{"_index":619,"title":{},"content":{"49":{"position":[[53,7]]},"55":{"position":[[17,7]]}},"keywords":{}}],["приватн",{"_index":625,"title":{"52":{"position":[[8,9]]}},"content":{},"keywords":{}}],["привед",{"_index":310,"title":{},"content":{"27":{"position":[[662,8]]}},"keywords":{}}],["приведет",{"_index":94,"title":{},"content":{"4":{"position":[[488,8]]},"46":{"position":[[98,8]]}},"keywords":{}}],["привнос",{"_index":57,"title":{},"content":{"3":{"position":[[376,9]]}},"keywords":{}}],["привод",{"_index":511,"title":{},"content":{"39":{"position":[[143,8]]}},"keywords":{}}],["приложен",{"_index":97,"title":{"63":{"position":[[30,10]]}},"content":{"4":{"position":[[543,10],[774,10]]},"20":{"position":[[98,11],[213,11]]},"21":{"position":[[283,10]]},"26":{"position":[[46,10],[114,10]]},"27":{"position":[[19,10]]},"38":{"position":[[59,10],[122,10],[825,10]]},"41":{"position":[[83,10]]},"59":{"position":[[336,10],[1731,11],[1950,10]]},"60":{"position":[[69,11],[762,11]]},"61":{"position":[[145,11],[251,10],[355,10],[1375,11]]},"69":{"position":[[1422,11]]}},"keywords":{}}],["применен",{"_index":176,"title":{"20":{"position":[[0,10]]}},"content":{},"keywords":{}}],["применя",{"_index":155,"title":{"19":{"position":[[11,9]]}},"content":{},"keywords":{}}],["пример",{"_index":66,"title":{"4":{"position":[[0,6]]},"5":{"position":[[0,6]]},"6":{"position":[[0,6]]},"24":{"position":[[0,7]]},"28":{"position":[[0,6]]},"30":{"position":[[0,6]]},"37":{"position":[[0,6]]},"42":{"position":[[0,7]]},"45":{"position":[[0,6]]},"47":{"position":[[0,7]]},"54":{"position":[[0,7]]},"58":{"position":[[0,7]]},"66":{"position":[[0,7]]},"69":{"position":[[0,7]]},"71":{"position":[[0,7]]}},"content":{"22":{"position":[[103,8]]},"36":{"position":[[202,7]]},"38":{"position":[[176,6],[1784,6]]},"47":{"position":[[933,8]]},"48":{"position":[[100,7]]},"73":{"position":[[1,6]]},"75":{"position":[[1,7]]}},"keywords":{}}],["принима",{"_index":7,"title":{},"content":{"0":{"position":[[73,9]]},"61":{"position":[[507,11]]},"67":{"position":[[199,11]]}},"keywords":{}}],["принцип",{"_index":831,"title":{"72":{"position":[[0,8]]}},"content":{},"keywords":{}}],["присутств",{"_index":589,"title":{},"content":{"47":{"position":[[122,12]]}},"keywords":{}}],["причин",{"_index":194,"title":{"27":{"position":[[0,7]]},"29":{"position":[[9,7]]},"70":{"position":[[20,6]]}},"content":{"21":{"position":[[73,6],[196,7]]},"24":{"position":[[836,9]]},"27":{"position":[[639,6]]},"31":{"position":[[14,7],[206,7],[511,7]]},"43":{"position":[[1162,8]]},"44":{"position":[[89,7],[245,8]]},"68":{"position":[[345,7]]},"69":{"position":[[1275,7],[1313,7]]},"70":{"position":[[51,7]]},"71":{"position":[[243,7],[400,7]]},"75":{"position":[[783,8],[1874,10]]},"76":{"position":[[1053,10],[1134,8]]}},"keywords":{}}],["пробл",{"_index":736,"title":{"62":{"position":[[10,7]]}},"content":{},"keywords":{}}],["проблем",{"_index":83,"title":{},"content":{"4":{"position":[[203,8]]},"5":{"position":[[207,8]]}},"keywords":{}}],["проверк",{"_index":93,"title":{},"content":{"4":{"position":[[462,8],[789,8]]},"5":{"position":[[289,8]]},"28":{"position":[[334,8],[471,8]]},"54":{"position":[[368,8]]}},"keywords":{}}],["проверя",{"_index":106,"title":{},"content":{"4":{"position":[[671,9]]},"5":{"position":[[241,11],[473,9]]},"47":{"position":[[1510,9]]},"73":{"position":[[3958,9]]},"74":{"position":[[148,9]]}},"keywords":{}}],["провест",{"_index":117,"title":{},"content":{"5":{"position":[[311,8]]}},"keywords":{}}],["проект",{"_index":469,"title":{},"content":{"36":{"position":[[56,8],[134,8]]}},"keywords":{}}],["проектирован",{"_index":20,"title":{},"content":{"1":{"position":[[93,14]]}},"keywords":{}}],["произойт",{"_index":428,"title":{},"content":{"31":{"position":[[541,9]]}},"keywords":{}}],["произошл",{"_index":430,"title":{},"content":{"31":{"position":[[632,9],[1009,9]]},"75":{"position":[[1278,9],[2055,9]]}},"keywords":{}}],["происход",{"_index":579,"title":{},"content":{"45":{"position":[[1510,11]]},"47":{"position":[[973,10]]},"73":{"position":[[1348,10]]}},"keywords":{}}],["пройд",{"_index":255,"title":{},"content":{"24":{"position":[[800,9]]}},"keywords":{}}],["пройден",{"_index":870,"title":{},"content":{"73":{"position":[[4040,10]]}},"keywords":{}}],["пройт",{"_index":281,"title":{},"content":{"24":{"position":[[1951,6]]}},"keywords":{}}],["прост",{"_index":214,"title":{},"content":{"22":{"position":[[11,7]]},"67":{"position":[[225,7]]}},"keywords":{}}],["простот",{"_index":748,"title":{},"content":{"65":{"position":[[150,8],[348,8]]}},"keywords":{}}],["протестирова",{"_index":897,"title":{},"content":{"75":{"position":[[114,14],[180,14]]}},"keywords":{}}],["противн",{"_index":152,"title":{},"content":{"17":{"position":[[128,9]]}},"keywords":{}}],["прохожден",{"_index":260,"title":{},"content":{"24":{"position":[[955,11]]}},"keywords":{}}],["прочита",{"_index":33,"title":{},"content":{"3":{"position":[[25,9]]},"54":{"position":[[2705,9]]}},"keywords":{}}],["прочтен",{"_index":905,"title":{},"content":{"75":{"position":[[1017,9],[1981,11]]}},"keywords":{}}],["прошел",{"_index":112,"title":{},"content":{"5":{"position":[[168,6]]}},"keywords":{}}],["работ",{"_index":199,"title":{},"content":{"21":{"position":[[129,6]]}},"keywords":{}}],["работа",{"_index":161,"title":{},"content":{"19":{"position":[[142,8]]},"36":{"position":[[94,8]]}},"keywords":{}}],["развива",{"_index":183,"title":{},"content":{"20":{"position":[[134,9]]}},"keywords":{}}],["разн",{"_index":188,"title":{},"content":{"20":{"position":[[206,6]]},"27":{"position":[[284,6]]},"31":{"position":[[52,7]]},"38":{"position":[[2244,6]]}},"keywords":{}}],["разработк",{"_index":180,"title":{},"content":{"20":{"position":[[22,10]]}},"keywords":{}}],["разработчик",{"_index":200,"title":{},"content":{"21":{"position":[[164,11]]}},"keywords":{}}],["разреша",{"_index":543,"title":{},"content":{"43":{"position":[[1094,9]]}},"keywords":{}}],["разрешен",{"_index":560,"title":{},"content":{"45":{"position":[[884,10],[1483,10]]},"75":{"position":[[213,10]]}},"keywords":{}}],["рамк",{"_index":319,"title":{},"content":{"28":{"position":[[162,6]]},"36":{"position":[[105,6]]}},"keywords":{}}],["располага",{"_index":420,"title":{},"content":{"31":{"position":[[230,13]]}},"keywords":{}}],["расчет",{"_index":60,"title":{},"content":{"3":{"position":[[424,7]]},"27":{"position":[[554,7]]},"31":{"position":[[616,7],[993,7]]}},"keywords":{}}],["расширя",{"_index":165,"title":{},"content":{"19":{"position":[[224,9]]}},"keywords":{}}],["реакц",{"_index":898,"title":{},"content":{"75":{"position":[[202,7]]}},"keywords":{}}],["реализ",{"_index":321,"title":{},"content":{"28":{"position":[[251,9],[386,9]]},"41":{"position":[[452,11]]}},"keywords":{}}],["реализац",{"_index":123,"title":{"6":{"position":[[7,10]]},"45":{"position":[[7,10]]},"53":{"position":[[0,10]]}},"content":{"20":{"position":[[62,10],[193,10]]},"24":{"position":[[80,10]]},"38":{"position":[[183,11],[2157,10]]},"68":{"position":[[137,10],[296,10]]},"69":{"position":[[101,10],[287,11]]}},"keywords":{}}],["реализова",{"_index":156,"title":{},"content":{"19":{"position":[[15,11]]},"22":{"position":[[42,10]]},"24":{"position":[[1881,11]]},"54":{"position":[[253,11],[336,11],[411,11]]},"69":{"position":[[140,10]]},"75":{"position":[[10,13]]}},"keywords":{}}],["реализу",{"_index":792,"title":{},"content":{"69":{"position":[[382,9]]}},"keywords":{}}],["реализуем",{"_index":844,"title":{},"content":{"73":{"position":[[2115,11]]},"75":{"position":[[1592,11]]}},"keywords":{}}],["реальн",{"_index":344,"title":{},"content":{"30":{"position":[[572,8],[1722,8]]},"37":{"position":[[269,8]]},"38":{"position":[[383,8]]},"43":{"position":[[355,8]]},"54":{"position":[[550,8]]},"58":{"position":[[201,8]]},"59":{"position":[[107,8]]}},"keywords":{}}],["регистрир",{"_index":492,"title":{},"content":{"38":{"position":[[1162,12]]},"59":{"position":[[673,12],[1259,12]]}},"keywords":{}}],["редактирован",{"_index":599,"title":{},"content":{"47":{"position":[[1065,14]]}},"keywords":{}}],["рекоменд",{"_index":710,"title":{},"content":{"60":{"position":[[738,13]]}},"keywords":{}}],["рендер",{"_index":711,"title":{},"content":{"60":{"position":[[752,9]]},"61":{"position":[[347,7]]}},"keywords":{}}],["рендеринг",{"_index":687,"title":{},"content":{"59":{"position":[[1940,9]]},"61":{"position":[[135,9],[240,10]]}},"keywords":{}}],["решен",{"_index":91,"title":{},"content":{"4":{"position":[[414,7],[597,7]]},"5":{"position":[[366,7]]},"28":{"position":[[216,7],[565,7]]},"30":{"position":[[465,7]]},"45":{"position":[[121,7]]},"47":{"position":[[179,8],[1092,8]]},"54":{"position":[[234,7]]}},"keywords":{}}],["реэкспортирова",{"_index":346,"title":{},"content":{"30":{"position":[[593,18]]},"37":{"position":[[290,18]]},"38":{"position":[[428,16]]},"43":{"position":[[376,18]]},"54":{"position":[[575,16]]},"58":{"position":[[222,18]]},"59":{"position":[[152,16]]}},"keywords":{}}],["рожден",{"_index":827,"title":{},"content":{"71":{"position":[[905,8]]},"74":{"position":[[978,10],[1136,8]]}},"keywords":{}}],["рол",{"_index":70,"title":{},"content":{"4":{"position":[[26,4],[295,4],[313,5],[681,4]]},"19":{"position":[[127,6],[427,6]]},"41":{"position":[[145,6],[413,4]]},"42":{"position":[[197,4]]}},"keywords":{}}],["ролев",{"_index":163,"title":{},"content":{"19":{"position":[[162,7]]}},"keywords":{}}],["рост",{"_index":419,"title":{},"content":{"31":{"position":[[200,5]]},"46":{"position":[[119,5]]},"47":{"position":[[993,4]]},"73":{"position":[[5431,5]]}},"keywords":{}}],["рут",{"_index":206,"title":{"63":{"position":[[24,5]]}},"content":{"21":{"position":[[277,5]]},"26":{"position":[[108,5]]},"65":{"position":[[282,5]]},"69":{"position":[[313,4]]}},"keywords":{}}],["рутудоступ",{"_index":598,"title":{},"content":{"47":{"position":[[1044,10]]}},"keywords":{}}],["ряд",{"_index":784,"title":{},"content":{"68":{"position":[[124,3]]}},"keywords":{}}],["рядов",{"_index":523,"title":{},"content":{"41":{"position":[[464,7]]}},"keywords":{}}],["сведен",{"_index":160,"title":{},"content":{"19":{"position":[[116,8],[195,8],[434,8]]}},"keywords":{}}],["связ",{"_index":61,"title":{},"content":{"3":{"position":[[445,5]]},"65":{"position":[[205,5]]}},"keywords":{}}],["связа",{"_index":65,"title":{"36":{"position":[[18,7]]}},"content":{"3":{"position":[[544,7]]},"27":{"position":[[83,6]]}},"keywords":{}}],["связк",{"_index":162,"title":{},"content":{"19":{"position":[[153,6]]}},"keywords":{}}],["связыван",{"_index":595,"title":{},"content":{"47":{"position":[[946,10]]}},"keywords":{}}],["сервис",{"_index":122,"title":{},"content":{"5":{"position":[[404,7]]},"21":{"position":[[332,10]]}},"keywords":{}}],["систем",{"_index":43,"title":{"36":{"position":[[37,8]]}},"content":{"3":{"position":[[165,7]]},"19":{"position":[[3,7],[38,7]]},"20":{"position":[[33,7],[73,7]]}},"keywords":{}}],["системевозможн",{"_index":312,"title":{},"content":{"27":{"position":[[695,18]]}},"keywords":{}}],["системн",{"_index":427,"title":{},"content":{"31":{"position":[[501,9]]}},"keywords":{}}],["след",{"_index":685,"title":{},"content":{"59":{"position":[[1817,7]]},"61":{"position":[[12,7]]}},"keywords":{}}],["сло",{"_index":575,"title":{},"content":{"45":{"position":[[1438,5]]},"60":{"position":[[64,4]]}},"keywords":{}}],["сложн",{"_index":588,"title":{},"content":{"46":{"position":[[155,7]]}},"keywords":{}}],["сложност",{"_index":417,"title":{},"content":{"31":{"position":[[173,9]]},"59":{"position":[[1569,10]]}},"keywords":{}}],["случа",{"_index":150,"title":{},"content":{"17":{"position":[[60,7],[138,6]]},"27":{"position":[[74,8]]},"61":{"position":[[1320,6]]},"69":{"position":[[1300,7]]}},"keywords":{}}],["смен",{"_index":284,"title":{},"content":{"24":{"position":[[2050,7]]}},"keywords":{}}],["снят",{"_index":519,"title":{},"content":{"41":{"position":[[208,5]]}},"keywords":{}}],["соблюда",{"_index":679,"title":{},"content":{"59":{"position":[[1546,9]]}},"keywords":{}}],["соглашен",{"_index":445,"title":{"32":{"position":[[0,11]]}},"content":{},"keywords":{}}],["содерж",{"_index":327,"title":{},"content":{"28":{"position":[[608,8]]},"31":{"position":[[477,8]]},"38":{"position":[[804,8]]},"59":{"position":[[315,8]]}},"keywords":{}}],["созда",{"_index":81,"title":{},"content":{"4":{"position":[[179,9]]},"28":{"position":[[196,7]]},"36":{"position":[[301,9],[402,9]]},"37":{"position":[[654,7]]},"43":{"position":[[13,9]]},"45":{"position":[[1279,7],[2143,7]]},"47":{"position":[[189,7],[1102,7]]},"53":{"position":[[7,9]]},"67":{"position":[[47,7]]},"68":{"position":[[55,7],[188,9]]}},"keywords":{}}],["создава",{"_index":416,"title":{},"content":{"31":{"position":[[148,9]]},"37":{"position":[[702,9]]},"73":{"position":[[1107,9]]}},"keywords":{}}],["создан",{"_index":220,"title":{"35":{"position":[[0,8]]},"37":{"position":[[7,8]]},"43":{"position":[[0,8]]},"68":{"position":[[0,8]]}},"content":{"24":{"position":[[13,8]]},"58":{"position":[[115,8]]},"69":{"position":[[22,8],[260,8]]}},"keywords":{}}],["соответств",{"_index":631,"title":{},"content":{"54":{"position":[[68,13],[178,13]]},"69":{"position":[[1363,15]]},"73":{"position":[[1361,12],[4070,13]]},"74":{"position":[[1036,13],[1168,13]]},"75":{"position":[[767,15],[1858,15]]},"76":{"position":[[1037,15]]}},"keywords":{}}],["соответствен",{"_index":510,"title":{},"content":{"39":{"position":[[45,14]]}},"keywords":{}}],["соответствова",{"_index":470,"title":{},"content":{"36":{"position":[[167,15]]}},"keywords":{}}],["соста",{"_index":285,"title":{"26":{"position":[[0,6]]}},"content":{},"keywords":{}}],["софт",{"_index":23,"title":{},"content":{"1":{"position":[[126,5]]}},"keywords":{}}],["специфичн",{"_index":59,"title":{},"content":{"3":{"position":[[406,13],[555,14]]}},"keywords":{}}],["способ",{"_index":191,"title":{},"content":{"21":{"position":[[26,6]]}},"keywords":{}}],["сраз",{"_index":750,"title":{},"content":{"65":{"position":[[193,5]]}},"keywords":{}}],["стандартн",{"_index":15,"title":{},"content":{"1":{"position":[[20,11]]},"68":{"position":[[333,11]]}},"keywords":{}}],["стат",{"_index":31,"title":{},"content":{"3":{"position":[[8,6]]}},"keywords":{}}],["сторон",{"_index":53,"title":{},"content":{"3":{"position":[[331,7]]}},"keywords":{}}],["страниц",{"_index":387,"title":{"67":{"position":[[10,9]]}},"content":{"30":{"position":[[2716,10]]},"61":{"position":[[2248,10]]},"65":{"position":[[211,8]]},"67":{"position":[[38,8],[96,8]]},"68":{"position":[[111,8],[128,8]]},"69":{"position":[[13,8],[251,8],[1413,8]]},"75":{"position":[[1417,10]]}},"keywords":{}}],["сценар",{"_index":884,"title":{},"content":{"74":{"position":[[83,9]]}},"keywords":{}}],["счет",{"_index":508,"title":{},"content":{"38":{"position":[[2210,4]]}},"keywords":{}}],["счита",{"_index":869,"title":{},"content":{"73":{"position":[[4030,9]]}},"keywords":{}}],["так",{"_index":720,"title":{},"content":{"61":{"position":[[1314,5]]}},"keywords":{}}],["тариф",{"_index":532,"title":{},"content":{"42":{"position":[[719,7]]}},"keywords":{}}],["тест",{"_index":835,"title":{"73":{"position":[[25,8]]}},"content":{"73":{"position":[[1065,6],[1496,4],[1669,4],[1797,4],[2003,4],[2127,4],[2749,5],[3977,4],[4454,4],[4942,4],[5448,4]]},"74":{"position":[[45,7],[210,4]]},"75":{"position":[[485,4],[699,4],[928,4],[1223,4],[1604,4]]}},"keywords":{}}],["тестирован",{"_index":832,"title":{"72":{"position":[[9,12]]},"74":{"position":[[0,12]]},"75":{"position":[[0,12]]}},"content":{"73":{"position":[[3916,12]]},"74":{"position":[[5,12],[118,12]]}},"keywords":{}}],["товар",{"_index":633,"title":{},"content":{"54":{"position":[[129,6],[226,6],[1720,5]]},"61":{"position":[[1005,5]]}},"keywords":{}}],["точк",{"_index":482,"title":{"38":{"position":[[32,5]]}},"content":{"38":{"position":[[51,5]]}},"keywords":{}}],["точкерасчет",{"_index":292,"title":{},"content":{"27":{"position":[[38,11]]}},"keywords":{}}],["треб",{"_index":634,"title":{},"content":{"54":{"position":[[243,9]]},"58":{"position":[[54,9]]}},"keywords":{}}],["требован",{"_index":73,"title":{"42":{"position":[[8,11]]}},"content":{"4":{"position":[[66,10],[216,10]]},"5":{"position":[[64,10]]},"19":{"position":[[356,10]]},"24":{"position":[[1,10]]},"28":{"position":[[1,10]]},"30":{"position":[[1,10]]},"39":{"position":[[173,10]]},"41":{"position":[[1,10],[40,10],[479,10]]},"42":{"position":[[605,10],[977,10]]},"45":{"position":[[1,10]]},"47":{"position":[[111,10]]},"54":{"position":[[1,10]]},"68":{"position":[[159,11]]},"69":{"position":[[1,10]]}},"keywords":{}}],["требованиями"",{"_index":537,"title":{},"content":{"42":{"position":[[922,18]]}},"keywords":{}}],["требуем",{"_index":813,"title":{},"content":{"69":{"position":[[1403,9]]}},"keywords":{}}],["уведомлен",{"_index":339,"title":{},"content":{"30":{"position":[[390,11]]},"75":{"position":[[522,12],[950,11],[1245,11],[1734,12],[1914,11],[2022,11]]},"76":{"position":[[612,12]]}},"keywords":{}}],["угод",{"_index":783,"title":{},"content":{"67":{"position":[[213,5]]}},"keywords":{}}],["удобн",{"_index":189,"title":{},"content":{"21":{"position":[[1,7]]}},"keywords":{}}],["указа",{"_index":590,"title":{},"content":{"47":{"position":[[135,7]]},"54":{"position":[[103,10],[213,10]]},"58":{"position":[[142,7]]}},"keywords":{}}],["указыва",{"_index":46,"title":{"57":{"position":[[14,9]]}},"content":{"3":{"position":[[208,9]]},"41":{"position":[[51,9]]},"46":{"position":[[42,9]]}},"keywords":{}}],["улучш",{"_index":196,"title":{},"content":{"21":{"position":[[108,8]]}},"keywords":{}}],["уменьш",{"_index":178,"title":{},"content":{"20":{"position":[[1,9]]}},"keywords":{}}],["управлен",{"_index":158,"title":{},"content":{"19":{"position":[[77,10]]},"48":{"position":[[238,10]]}},"keywords":{}}],["упрост",{"_index":787,"title":{},"content":{"68":{"position":[[286,9]]}},"keywords":{}}],["уровн",{"_index":295,"title":{},"content":{"27":{"position":[[176,6]]},"47":{"position":[[1483,6]]}},"keywords":{}}],["услов",{"_index":168,"title":{},"content":{"19":{"position":[[296,7],[418,8]]},"41":{"position":[[325,7]]},"73":{"position":[[5022,8]]}},"keywords":{}}],["усложня",{"_index":753,"title":{},"content":{"65":{"position":[[321,9]]}},"keywords":{}}],["успешн",{"_index":712,"title":{},"content":{"60":{"position":[[811,7]]},"62":{"position":[[59,7]]},"75":{"position":[[551,7],[1763,7]]},"76":{"position":[[641,7]]}},"keywords":{}}],["учитыва",{"_index":89,"title":{},"content":{"4":{"position":[[361,9]]}},"keywords":{}}],["файл",{"_index":370,"title":{},"content":{"30":{"position":[[1799,4]]}},"keywords":{}}],["факторн",{"_index":113,"title":{},"content":{"5":{"position":[[180,9]]}},"keywords":{}}],["фасад",{"_index":786,"title":{},"content":{"68":{"position":[[267,6]]}},"keywords":{}}],["финальн",{"_index":874,"title":{},"content":{"73":{"position":[[4395,9],[4969,9]]}},"keywords":{}}],["фич",{"_index":16,"title":{},"content":{"1":{"position":[[32,5]]},"45":{"position":[[1428,4]]},"59":{"position":[[1726,4]]}},"keywords":{}}],["форм",{"_index":539,"title":{},"content":{"42":{"position":[[992,6]]}},"keywords":{}}],["формат",{"_index":453,"title":{},"content":{"32":{"position":[[135,7]]}},"keywords":{}}],["формирова",{"_index":294,"title":{},"content":{"27":{"position":[[153,11]]}},"keywords":{}}],["формирован",{"_index":192,"title":{"40":{"position":[[0,12]]}},"content":{"21":{"position":[[33,12],[247,12]]},"26":{"position":[[8,12]]},"27":{"position":[[753,12]]},"31":{"position":[[719,12],[1112,12]]},"37":{"position":[[843,12]]},"38":{"position":[[1222,12],[1498,12],[2121,12]]},"39":{"position":[[204,12]]},"57":{"position":[[69,12]]},"58":{"position":[[19,12]]},"59":{"position":[[733,12],[1009,12]]},"61":{"position":[[450,12]]},"73":{"position":[[1328,12]]},"75":{"position":[[83,12]]}},"keywords":{}}],["функц",{"_index":626,"title":{"52":{"position":[[18,7]]}},"content":{},"keywords":{}}],["функциона",{"_index":173,"title":{},"content":{"19":{"position":[[389,11]]},"41":{"position":[[72,10],[347,12]]},"65":{"position":[[367,12]]}},"keywords":{}}],["функционал",{"_index":525,"title":{},"content":{"42":{"position":[[156,11],[428,11]]}},"keywords":{}}],["функционалабизнес",{"_index":171,"title":{},"content":{"19":{"position":[[338,17]]}},"keywords":{}}],["функционалперманентн",{"_index":521,"title":{},"content":{"41":{"position":[[302,22]]}},"keywords":{}}],["хвата",{"_index":86,"title":{},"content":{"4":{"position":[[264,7]]}},"keywords":{}}],["хран",{"_index":413,"title":{"31":{"position":[[12,8]]}},"content":{"31":{"position":[[108,7]]},"64":{"position":[[18,8]]}},"keywords":{}}],["хранен",{"_index":306,"title":{},"content":{"27":{"position":[[449,8],[630,8]]},"31":{"position":[[802,8]]}},"keywords":{}}],["централизова",{"_index":157,"title":{},"content":{"19":{"position":[[59,17]]},"27":{"position":[[613,16],[714,16]]},"31":{"position":[[784,17]]},"38":{"position":[[2082,16]]},"62":{"position":[[333,15]]}},"keywords":{}}],["циклическ",{"_index":325,"title":{},"content":{"28":{"position":[[511,11]]}},"keywords":{}}],["част",{"_index":109,"title":{},"content":{"4":{"position":[[767,6]]},"19":{"position":[[332,5]]},"34":{"position":[[379,6]]},"52":{"position":[[52,6]]},"61":{"position":[[1369,5]]}},"keywords":{}}],["чего/к",{"_index":606,"title":{},"content":{"48":{"position":[[79,6]]}},"keywords":{}}],["чекбокс",{"_index":535,"title":{},"content":{"42":{"position":[[895,7]]}},"keywords":{}}],["чему?"",{"_index":607,"title":{},"content":{"48":{"position":[[86,12]]}},"keywords":{}}],["чита",{"_index":553,"title":{},"content":{"44":{"position":[[261,7]]}},"keywords":{}}],["чтен",{"_index":610,"title":{},"content":{"48":{"position":[[189,6]]},"54":{"position":[[13,6]]}},"keywords":{}}],["эд",{"_index":69,"title":{},"content":{"4":{"position":[[21,3]]},"5":{"position":[[21,3]]}},"keywords":{}}],["явля",{"_index":422,"title":{},"content":{"31":{"position":[[330,8],[1207,8]]},"34":{"position":[[370,8]]},"41":{"position":[[12,8],[263,9]]},"45":{"position":[[94,8]]},"47":{"position":[[75,8]]},"52":{"position":[[43,8]]},"61":{"position":[[380,8]]}},"keywords":{}}]],"pipeline":["stemmer","stemmer-ru"]} \ No newline at end of file +{"version":"2.3.9","fields":["title","content","keywords"],"fieldVectors":[["title/0",[0,637.414,1,317.933,2,701.977]],["content/0",[]],["keywords/0",[]],["title/1",[3,986.923]],["content/1",[1,4.819,3,12.812,4,8.931,5,4.521,6,12.127,7,8.931,8,5.736,9,8.348,10,3.666,11,10.641,12,9.662,13,8.931]],["keywords/1",[]],["title/2",[14,637.414,15,701.977,16,701.977]],["content/2",[0,9.166,1,5.62,14,11.267,15,12.408,16,12.408,17,9.166,18,7.063,19,2.622,20,5.441,21,11.504,22,8.473,23,11.504,24,7.919,25,10.095]],["keywords/2",[]],["title/3",[1,246.704,26,620.765,27,246.704,28,263.739,29,293.617]],["content/3",[]],["keywords/3",[]],["title/4",[30,828.357]],["content/4",[1,5.82,5,3.89,14,8.313,25,9.155,31,7.413,32,10.433,33,4.285,34,7.684,35,10.433,36,10.433,37,10.433,38,7.182,39,7.684,40,9.155,41,10.433,42,9.155,43,8.313,44,4.285,45,7.182,46,8.313,47,6.764,48,10.433,49,2.661,50,10.433,51,10.433]],["keywords/4",[]],["title/5",[52,828.357]],["content/5",[5,5.305,19,2.65,20,5.498,45,8.001,47,7.536,53,12.487,54,10.199,55,11.624,56,11.624,57,8.001,58,11.624,59,10.199,60,11.624,61,11.624,62,11.624]],["keywords/5",[]],["title/6",[63,774.223]],["content/6",[1,5.728,52,8.742,63,8.171,64,11.87,65,7.695,66,8.742,67,9.457,68,6.931,69,11.87,70,9.457,71,11.87,72,11.87,73,11.87,74,11.87]],["keywords/6",[]],["title/7",[63,774.223]],["content/7",[2,10.757,8,5.799,13,9.029,20,5.799,63,8.439,75,10.757,76,9.768,77,9.768,78,12.259,79,12.259,80,12.259,81,12.259]],["keywords/7",[]],["title/8",[82,986.923]],["content/8",[13,8.836,82,10.527,83,10.527,84,8.258,85,8.836,86,11.997,87,9.559,88,9.559,89,11.559,90,11.997,91,11.997,92,11.997,93,11.997]],["keywords/8",[]],["title/9",[1,246.704,49,158.296,52,457.191,94,427.313,95,494.61]],["content/9",[]],["keywords/9",[]],["title/10",[96,330.413]],["content/10",[45,9.248,96,3.947,97,8.249,98,13.435]],["keywords/10",[]],["title/11",[1,246.704,99,457.191,100,381.134,101,494.61,102,544.708]],["content/11",[1,5.355,5,3.97,19,3.072,31,4.18,33,3.081,34,5.524,45,5.163,53,6.582,66,5.524,77,5.977,84,5.163,89,5.977,99,5.524,100,6.538,101,5.977,102,6.582,103,7.501,104,5.977,105,5.163,106,6.582,107,7.501,108,6.903,109,7.501,110,7.501,111,7.501,112,6.903,113,7.501,114,7.501,115,7.842,116,7.501,117,10.648,118,3.299,119,7.501,120,5.977,121,6.582,122,7.501,123,7.501,124,7.33,125,7.501,126,7.501,127,4.38,128,7.501,129,5.524,130,7.842,131,7.501,132,7.501,133,7.501,134,6.582,135,5.524,136,7.501,137,7.501,138,4.38,139,6.582,140,5.163,141,5.977,142,5.524]],["keywords/11",[]],["title/12",[1,277.826,140,481.218,143,481.218,144,389.577]],["content/12",[1,5.655,19,2.65,31,7.93,70,9.261,84,8.001,108,7.536,112,7.536,121,10.199,130,8.561,134,10.199,141,9.261,142,8.561,144,6.478,145,11.624,146,11.624]],["keywords/12",[]],["title/13",[143,550.688,144,445.817,147,637.414]],["content/13",[1,3.881,5,2.481,18,7.104,19,1.517,31,3.709,44,2.733,52,4.901,65,4.314,84,4.581,94,4.581,96,1.955,106,5.839,108,7.501,112,4.314,115,4.901,130,7.193,140,6.723,141,5.302,142,7.193,143,4.581,144,7.103,147,10.816,148,9.767,149,4.619,150,5.302,151,6.655,152,4.581,153,6.655,154,4.901,155,11.57,156,5.302,157,6.655,158,9.767,159,6.655,160,4.901,161,7.782,162,5.839,163,5.839,164,6.655,165,5.839,166,2.196,167,4.901,168,6.655,169,5.839,170,5.302,171,4.901,172,4.314,173,6.655,174,6.655,175,5.839,176,7.782,177,4.901,178,6.655,179,6.655,180,6.655,181,9.767,182,5.839,183,3.404,184,6.655,185,6.655,186,6.655,187,6.655,188,6.655,189,6.655,190,5.302,191,6.655]],["keywords/13",[]],["title/14",[161,744.957,192,820.412]],["content/14",[]],["keywords/14",[]],["title/15",[143,481.218,144,389.577,177,514.866,193,613.422]],["content/15",[5,3.558,19,2.176,28,4.055,31,5.319,45,6.57,47,6.188,54,8.375,96,2.804,108,6.188,127,5.574,144,6.997,147,7.605,156,7.605,161,7.605,167,7.03,170,7.605,172,6.188,176,7.605,177,7.03,193,8.375,194,9.545,195,8.375,196,7.605,197,9.545,198,9.545,199,9.545,200,8.375,201,10.005,202,12.557,203,12.557,204,8.375,205,9.545,206,9.545,207,8.375]],["keywords/15",[]],["title/16",[192,820.412,208,934.966]],["content/16",[]],["keywords/16",[]],["title/17",[143,643.598,144,521.034]],["content/17",[1,4.536,11,5.704,12,5.179,19,2.188,31,5.349,43,7.648,47,4.214,49,3.214,94,6.608,96,1.91,101,7.648,105,4.475,108,6.223,115,4.787,120,5.179,130,4.787,142,8.406,144,6.36,156,5.179,162,5.704,165,5.704,167,4.787,172,4.214,176,5.179,177,9.282,183,3.325,196,5.179,200,5.704,204,5.704,207,5.704,209,9.599,210,6.5,211,6.5,212,6.5,213,6.5,214,6.5,215,6.5,216,12.603,217,6.5,218,6.5,219,6.5,220,11.413,221,9.599,222,6.5,223,6.5,224,6.5,225,6.5,226,5.704,227,6.5,228,6.5,229,6.5,230,5.179,231,6.5,232,6.5,233,6.5,234,1.18,235,6.5,236,6.5,237,6.5,238,10.015,239,3.991,240,6.5,241,6.5,242,6.5,243,6.5,244,6.5]],["keywords/17",[]],["title/18",[31,445.817,94,550.688,245,799.994]],["content/18",[1,2.677,17,7.85,19,2.656,20,3.185,31,7.144,49,3.926,57,4.636,70,5.366,94,4.636,95,5.366,96,1.978,105,4.636,108,7.553,115,4.96,118,2.962,160,4.96,166,2.223,170,5.366,172,6.387,183,3.444,226,5.91,238,8.645,246,5.366,247,6.735,248,12.82,249,6.735,250,3.444,251,11.65,252,6.735,253,6.735,254,6.735,255,6.735,256,11.65,257,6.735,258,9.852,259,9.852,260,6.735,261,5.91,262,6.735,263,2.29,264,6.735,265,6.735,266,6.735,267,9.852,268,6.735,269,6.735,270,9.852,271,3.933,272,6.735,273,6.735,274,6.735,275,6.735,276,2.591,277,5.91,278,6.735,279,6.735,280,6.735,281,6.735]],["keywords/18",[]],["title/19",[1,277.826,27,277.826,172,453.208,282,699.075]],["content/19",[1,3.699,4,6.855,5,3.47,7,6.855,19,2.122,27,3.699,31,6.882,34,6.855,49,3.917,163,8.167,167,9.095,234,1.69,283,9.307,284,9.307,285,9.307,286,9.307,287,9.307,288,9.307,289,7.872,290,9.307,291,9.307,292,9.307,293,9.307,294,9.307,295,9.307,296,9.307,297,9.307,298,9.307,299,9.307,300,9.307,301,9.307,302,9.307]],["keywords/19",[]],["title/20",[1,277.826,140,481.218,144,389.577,303,699.075]],["content/20",[1,6.193,5,4.001,9,9.322,10,3.245,19,2.447,34,7.905,95,8.552,100,6.59,112,6.958,118,4.721,140,7.388,304,5.489,305,10.733,306,8.552,307,9.418,308,10.733,309,10.733,310,10.733,311,10.733,312,9.418,313,8.552]],["keywords/20",[]],["title/21",[96,235.016,314,467.159,315,550.688]],["content/21",[]],["keywords/21",[]],["title/22",[316,146.378,317,545.977]],["content/22",[318,7.94,319,7.94,320,13.598]],["keywords/22",[]],["title/23",[263,382.452]],["content/23",[318,7.94,319,7.94,321,13.598]],["keywords/23",[]],["title/24",[322,656.788]],["content/24",[318,7.94,319,7.94,323,13.598]],["keywords/24",[]],["title/25",[324,512.71]],["content/25",[318,7.94,319,7.94,325,13.598]],["keywords/25",[]],["title/26",[27,371.574,324,426.207]],["content/26",[318,7.94,319,7.94,326,13.598]],["keywords/26",[]],["title/27",[27,317.933,316,125.247,327,467.159]],["content/27",[318,7.94,319,7.94,328,13.598]],["keywords/27",[]],["title/28",[10,282.677,329,545.977]],["content/28",[318,7.94,319,7.94,330,13.598]],["keywords/28",[]],["title/29",[331,545.977,332,498.59]],["content/29",[318,7.94,319,7.94,333,13.598]],["keywords/29",[]],["title/30",[27,317.933,331,467.159,332,426.613]],["content/30",[334,9.895,335,13.435,336,13.435,337,9.895]],["keywords/30",[]],["title/31",[338,799.994,339,550.688,340,799.994]],["content/31",[]],["keywords/31",[]],["title/32",[169,544.708,339,427.313,341,494.61,342,457.191,343,494.61]],["content/32",[19,1.974,20,4.096,24,5.961,38,5.961,234,2.603,339,9.199,341,6.9,343,9.375,344,8.66,345,8.66,346,7.599,347,7.599,348,8.66,349,8.66,350,11.766,351,11.766,352,11.766,353,7.599,354,8.66,355,8.66,356,6.378,357,8.66,358,8.66,359,8.66,360,8.66,361,8.66,362,8.66,363,8.66,364,6.9,365,6.378,366,8.099,367,8.66,368,6.378,369,11.766,370,6.9,371,7.599,372,8.66,373,6.9,374,6.9]],["keywords/32",[]],["title/33",[96,235.016,342,589.192,343,637.414]],["content/33",[5,4.027,19,2.462,20,3.621,27,3.042,33,3.144,99,5.638,138,6.308,183,3.915,234,2.273,239,4.7,250,3.915,316,1.198,339,5.269,368,7.956,375,6.099,376,6.099,377,6.717,378,10.014,379,7.655,380,5.638,381,4.751,382,6.632,383,5.269,384,5.269,385,6.431,386,6.099,387,4.47,388,8.617,389,6.099,390,5.638,391,7.655,392,7.655,393,7.655,394,7.655,395,7.655,396,7.956,397,6.717,398,7.655,399,3.621,400,7.655,401,7.655,402,6.717,403,6.717,404,6.099,405,5.638,406,5.269,407,7.655,408,7.655,409,5.269,410,6.099]],["keywords/33",[]],["title/34",[96,235.016,339,550.688,342,589.192]],["content/34",[33,3.791,68,5.39,99,6.798,138,5.39,183,4.721,234,1.676,316,1.445,342,6.798,364,7.355,368,6.798,375,7.355,376,7.355,377,8.1,380,6.798,381,4.06,382,7.54,383,6.354,384,6.354,385,5.809,386,7.355,387,7.172,396,6.798,399,4.366,404,10.997,406,8.454,411,9.23,412,9.23,413,9.23,414,6.354,415,9.785,416,9.23,417,9.23,418,8.1,419,9.23,420,8.1]],["keywords/34",[]],["title/35",[63,774.223]],["content/35",[]],["keywords/35",[]],["title/36",[19,213.123,421,934.966]],["content/36",[19,2.104,22,9.045,33,3.791,38,8.454,66,6.798,89,7.355,97,5.667,100,5.667,234,2.671,315,8.454,341,9.785,378,9.045,381,4.06,409,6.354,422,6.354,423,8.1,424,9.23,425,13.802,426,9.23,427,9.23,428,9.23,429,9.23,430,9.23,431,9.785,432,9.23,433,6.354,434,9.23,435,9.23,436,7.355,437,8.1,438,5.39]],["keywords/36",[]],["title/37",[304,409.157,315,550.688,439,799.994]],["content/37",[5,5.239,38,9.673,68,6.65,195,9.992,234,2.068,312,9.992,314,8.206,440,11.387,441,11.387,442,11.387,443,11.387,444,11.387,445,11.387,446,6.992,447,9.992,448,8.387]],["keywords/37",[]],["title/38",[22,688.599,315,643.598]],["content/38",[0,7.943,5,3.717,9,6.863,10,3.014,44,5.306,175,8.748,234,2.602,304,5.099,313,7.943,385,4.715,420,8.748,449,9.969,450,8.748,451,9.969,452,5.889,453,9.969,454,5.682,455,9.969,456,9.969,457,8.748,458,6.121,459,9.969,460,9.969,461,6.863,462,9.969,463,7.342,464,8.748,465,9.969]],["keywords/38",[]],["title/39",[466,799.994,467,589.192,468,364.679]],["content/39",[10,3.789,13,9.231,18,7.695,96,3.682,97,7.695,124,8.628,315,8.628,467,9.231,468,5.713,469,10.998]],["keywords/39",[]],["title/40",[316,125.247,470,409.157,471,550.688]],["content/40",[]],["keywords/40",[]],["title/41",[20,330.657,316,109.447,470,357.542,471,481.218]],["content/41",[20,6.688,22,8.473,129,8.473,149,5.441,316,2.397,470,7.83,471,10.994,472,10.415,473,11.504]],["keywords/41",[]],["title/42",[415,557.005,474,699.075,475,699.075,476,699.075]],["content/42",[]],["keywords/42",[]],["title/43",[96,330.413]],["content/43",[19,1,28,3.009,29,6.209,33,2.909,44,1.802,49,4.393,97,2.694,166,2.939,183,2.244,234,1.286,239,2.694,263,2.408,276,2.725,314,2.562,316,1.109,327,2.562,381,1.93,385,2.076,387,2.562,399,2.076,410,5.643,415,8.142,464,3.85,470,2.244,477,2.694,478,4.962,479,4.388,480,3.232,481,3.35,482,2.562,483,6.451,484,3.777,485,2.244,486,2.445,487,2.244,488,2.244,489,8.904,490,7.082,491,3.481,492,3.622,493,3.481,494,2.562,495,3.232,496,2.445,497,2.694,498,2.244,499,2.445,500,3.232,501,2.445,502,3.232,503,2.694,504,4.765,505,2.694,506,2.34,507,4.388,508,4.388,509,2.845,510,3.496,511,3.232,512,4.388,513,4.388,514,4.388,515,2.694,516,2.34,517,3.232,518,3.85,519,2.076,520,3.232,521,3.232,522,7.082,523,4.388,524,1.93,525,4.388,526,3.85,527,4.388,528,4.388,529,6.558,530,4.388,531,3.85,532,3.021,533,4.388,534,2.845,535,3.232,536,4.388]],["keywords/43",[]],["title/44",[68,467.159,316,125.247,317,467.159]],["content/44",[]],["keywords/44",[]],["title/45",[316,125.247,537,799.994,538,393.158]],["content/45",[5,5.515,33,5.091,399,5.863,452,5.65,454,5.452,461,8.532,539,12.395,540,12.395,541,12.395,542,9.876]],["keywords/45",[]],["title/46",[44,229.293,234,101.357,399,264.04,446,342.74,538,274.344,543,558.233]],["content/46",[5,2.873,8,5.134,9,5.305,10,3.282,19,1.757,20,5.134,44,3.166,87,6.141,234,2.841,304,3.942,329,4.501,370,6.141,374,6.141,399,5.134,402,6.763,422,7.472,446,4.732,448,5.676,452,3.513,454,4.774,458,4.732,472,5.676,538,7.065,544,7.707,545,7.707,546,7.707,547,6.763,548,7.707,549,9.524,550,10.011,551,7.707,552,7.707,553,7.707,554,7.707,555,7.707,556,6.763,557,6.763,558,9.524,559,6.763,560,6.763,561,7.707,562,7.707,563,7.707,564,7.707,565,7.707]],["keywords/46",[]],["title/47",[96,235.016,549,701.977,550,637.414]],["content/47",[9,5.417,10,3.842,33,4.524,65,5.102,67,6.27,138,6.432,234,2.307,246,6.27,250,4.025,316,1.232,381,3.461,382,4.832,384,5.417,388,7.582,396,8.112,399,6.01,404,8.776,410,8.776,538,7.729,550,10.124,566,6.905,567,7.87,568,7.87,569,7.87,570,7.87,571,13.764,572,9.665,573,11.014,574,13.764,575,11.014,576,7.87,577,7.87,578,7.87]],["keywords/47",[]],["title/48",[234,145.253,263,272.03,579,518.633]],["content/48",[]],["keywords/48",[]],["title/49",[580,896.153]],["content/49",[49,4.543,150,8.173,201,5.673,263,4.089,271,4.158,316,1.115,317,4.158,405,5.244,409,4.901,482,4.158,519,3.368,579,4.616,581,6.247,582,4.371,583,5.244,584,8.856,585,6.247,586,6.247,587,6.247,588,6.247,589,5.244]],["keywords/49",[]],["title/50",[477,574.045,579,606.136]],["content/50",[]],["keywords/50",[]],["title/51",[38,427.313,373,494.61,374,494.61,538,305.076,579,402.44]],["content/51",[8,4.515,17,10.005,66,7.03,67,7.605,96,2.804,250,6.422,263,4.27,316,1.966,317,7.332,347,11.018,375,11.181,376,7.605,405,7.03,497,5.86,503,5.86,538,6.171,589,10.335,590,12.557,591,9.545,592,8.375,593,12.557,594,9.545,595,8.375,596,5.319,597,8.375]],["keywords/51",[]],["title/52",[27,277.826,96,205.368,468,318.675,477,429.214]],["content/52",[10,2.024,19,1.526,29,5.491,49,4.362,118,2.945,149,3.166,166,2.209,234,1.215,250,3.424,263,3.948,276,2.576,316,1.048,329,3.909,452,3.052,468,4.472,480,4.93,481,3.166,482,3.909,483,5.706,484,3.57,485,3.424,486,5.466,487,3.424,488,5.017,491,3.29,492,3.424,493,3.29,494,3.909,495,4.93,496,3.731,497,4.11,498,3.424,499,3.731,500,4.93,501,3.731,502,4.93,559,5.874,579,4.34,598,5.827,599,5.334,600,4.608,601,3.731,602,5.334,603,4.34,604,4.93,605,4.11,606,4.11,607,4.11,608,4.34,609,6.694,610,5.334,611,4.11,612,5.874]],["keywords/52",[]],["title/53",[68,362.498,234,112.711,519,293.617,579,402.44,613,544.708]],["content/53",[5,3.137,10,2.544,19,1.509,27,1.606,28,4.563,29,1.911,30,2.976,40,3.545,49,4.369,65,2.619,68,2.359,96,1.945,100,2.481,118,1.777,166,1.333,234,1.95,263,2.861,276,3.238,304,2.066,314,3.867,316,0.633,327,2.359,329,2.359,422,2.781,448,2.976,452,3.836,454,1.777,457,3.545,468,3.836,481,3.132,482,3.867,483,4.782,485,3.387,486,3.69,487,4.303,488,4.977,491,3.254,492,3.387,493,3.254,497,2.481,498,2.066,504,2.632,519,5.08,524,1.777,538,1.986,582,4.066,583,2.976,588,3.545,596,2.251,598,5.554,599,3.219,600,2.781,601,4.689,602,5.276,605,2.481,606,2.481,607,2.481,613,3.545,614,6.622,615,4.04,616,4.04,617,6.309,618,5.276,619,5.811,620,5.811,621,4.04,622,3.545,623,3.545,624,3.219,625,7.383,626,3.545,627,3.545,628,2.619,629,3.545,630,3.545,631,3.545,632,3.545,633,2.619,634,3.545,635,3.545,636,3.545,637,2.359,638,4.04,639,4.04,640,4.04,641,4.04,642,3.545]],["keywords/53",[]],["title/54",[263,272.03,399,378.391,643,637.414]],["content/54",[8,5.077,19,2.447,20,5.077,234,1.949,263,5.045,316,2.12,324,4.893,365,7.905,380,7.905,381,4.721,399,6.406,452,4.893,463,9.974,557,11.883,643,8.552,644,10.733,645,10.733,646,10.733,647,10.733]],["keywords/54",[]],["title/55",[44,287.144,234,126.929,322,408.227,454,307.493]],["content/55",[]],["keywords/55",[]],["title/56",[27,371.574,96,274.667]],["content/56",[8,1.372,19,1.142,20,1.372,28,3.774,29,4.597,33,1.191,42,2.545,49,4.393,83,2.545,85,2.136,118,2.203,135,4.869,138,1.694,149,1.372,154,2.136,166,4.08,172,1.88,183,4.025,263,1.703,276,3.028,289,3.525,316,0.454,327,1.694,381,1.276,382,1.781,385,3.127,387,2.925,414,1.997,418,2.545,438,1.694,463,2.136,468,2.283,481,2.369,483,4.777,484,2.671,485,1.483,486,2.791,487,1.483,488,1.483,491,2.462,492,2.562,493,3.249,494,1.694,496,1.616,498,1.483,499,1.616,501,1.616,504,4.377,505,1.781,506,1.547,515,1.781,516,2.671,519,3.722,520,2.136,521,3.689,524,3.461,529,3.689,532,1.997,534,6.755,535,2.136,538,1.425,566,2.545,582,1.781,596,1.616,598,2.283,601,1.616,603,1.88,605,3.075,606,1.781,607,1.781,608,1.88,617,1.88,628,1.88,633,1.88,637,1.694,642,2.545,648,5.556,649,2.901,650,2.901,651,2.311,652,2.901,653,2.901,654,2.901,655,2.311,656,2.901,657,3.991,658,2.901,659,2.901,660,1.997,661,2.136,662,2.136,663,2.136,664,1.88,665,2.136,666,2.311,667,2.136,668,2.136,669,2.311,670,2.311,671,2.311,672,2.545,673,2.901,674,2.136,675,4.395,676,3.448,677,3.689,678,4.395,679,2.545,680,2.545,681,2.901,682,2.901,683,2.545,684,2.901,685,2.311,686,2.311,687,1.694,688,2.545,689,4.395,690,4.395,691,2.901,692,2.901,693,2.901,694,3.991,695,3.991,696,2.901,697,2.136,698,2.901,699,2.901,700,2.901,701,2.901,702,2.901,703,2.901,704,2.901,705,2.901,706,2.901,707,2.901,708,2.901,709,2.901,710,2.901]],["keywords/56",[]],["title/57",[39,514.866,322,408.227,446,429.214,604,514.866]],["content/57",[8,2.461,10,2.451,19,1.848,39,3.832,44,4.091,49,4.418,65,3.373,118,2.289,234,2.042,263,1.769,271,4.734,276,3.832,316,0.815,322,6.566,334,5.97,368,5.97,370,6.459,385,2.461,387,3.038,414,3.581,422,3.581,446,4.977,447,4.565,448,3.832,452,3.695,454,3.566,467,3.832,468,3.695,478,2.899,538,2.557,558,4.565,598,2.372,603,3.373,604,8.281,610,4.146,711,5.203,712,4.565,713,5.203,714,3.832,715,5.203,716,5.203,717,8.107,718,4.565,719,5.203,720,5.203,721,5.203,722,5.203,723,9.959,724,7.113,725,7.113,726,8.107,727,5.203,728,5.203,729,8.107,730,8.107,731,5.203,732,5.203,733,5.203,734,5.203,735,5.203,736,5.203,737,5.203,738,5.203]],["keywords/57",[]],["title/58",[59,986.923]],["content/58",[8,5.555,10,3.551,127,6.859,149,5.555,289,6.263,322,8.363,739,11.745,740,11.745,741,9.358,742,11.745,743,11.745,744,11.745,745,11.745,746,11.745,747,11.745]],["keywords/58",[]],["title/59",[10,241.869,234,145.253,329,467.159]],["content/59",[]],["keywords/59",[]],["title/60",[10,168.775,24,384.268,234,101.357,263,189.821,356,411.136,748,558.233]],["content/60",[10,3.876,24,8.825,263,4.359,329,7.486,452,5.844,511,9.442,611,7.871,749,12.82]],["keywords/60",[]],["title/61",[96,330.413]],["content/61",[10,2.572,19,1.262,28,2.352,29,4.899,46,4.412,49,4.38,57,3.811,118,2.435,149,2.619,166,3.419,183,2.832,234,1.005,263,3.952,276,2.131,452,2.524,463,4.078,468,3.878,477,3.4,481,2.619,483,5.091,484,2.953,485,4.351,486,4.74,487,2.832,488,4.351,491,2.721,492,2.832,493,2.721,494,3.233,496,3.086,498,4.351,499,3.086,501,3.086,504,4.619,505,3.4,506,2.953,510,4.412,515,3.4,516,4.536,524,2.435,534,3.59,582,3.4,596,3.086,597,4.859,598,2.524,605,3.4,606,3.4,607,3.4,608,3.59,617,5.515,628,3.59,637,3.233,648,2.953,660,3.811,661,4.078,662,4.078,663,4.078,664,5.515,665,4.078,666,4.412,667,4.078,668,4.078,669,4.412,670,4.412,671,4.412,750,5.537,751,5.537,752,4.859,753,4.859]],["keywords/61",[]],["title/62",[10,211.357,263,237.713,624,557.005,754,557.005]],["content/62",[5,3.355,8,3.393,10,4.12,18,2.737,19,1.016,27,3.577,28,4.382,29,2.109,30,3.283,43,3.552,49,4.21,65,2.89,68,4.189,76,3.552,104,3.552,105,3.069,118,1.961,127,7.051,129,3.283,149,2.109,166,1.471,190,3.552,234,2.052,263,3.507,276,1.715,304,2.28,313,7.171,316,0.698,329,6.6,452,3.27,468,4.103,481,2.109,482,2.603,483,4.423,485,3.669,486,5.747,487,4.603,488,2.28,491,2.191,492,2.28,493,2.191,497,2.737,498,4.603,504,1.772,511,3.283,519,3.393,582,2.737,596,2.484,598,3.27,601,2.484,605,2.737,606,2.737,607,2.737,611,7.414,617,2.89,618,5.715,619,3.912,620,3.912,622,3.912,623,6.294,624,3.552,625,7.897,626,3.912,627,3.912,628,2.89,629,3.912,630,3.912,631,3.912,632,3.912,712,3.912,755,4.458,756,3.912,757,4.458,758,3.912,759,4.458,760,3.552,761,4.458,762,4.458,763,4.458,764,4.404,765,4.458,766,4.458,767,3.912,768,3.552,769,3.912]],["keywords/62",[]],["title/63",[27,446.989]],["content/63",[4,6.051,5,4.231,7,6.051,10,2.484,19,1.873,49,4.206,166,4.628,276,3.161,316,1.286,504,3.265,524,5.719,697,6.051,754,10.359,764,5.044,770,8.216,771,8.216,772,8.216,773,8.216,774,8.216,775,8.216,776,8.216,777,8.216,778,8.216,779,8.216,780,8.216,781,8.216,782,8.216,783,8.216,784,8.216,785,8.216,786,8.216,787,8.216,788,8.216,789,8.216,790,8.216,791,8.216,792,7.209,793,6.051,794,8.216]],["keywords/63",[]],["title/64",[190,744.957,754,744.957]],["content/64",[5,3.491,8,1.795,10,3.139,19,1.433,20,3.808,24,2.612,27,1.508,28,4.411,29,5.606,49,4.378,88,3.023,100,2.329,105,2.612,166,3.694,263,1.29,271,2.216,276,2.419,289,2.023,316,1.261,324,1.729,327,2.216,329,2.216,409,2.612,414,2.612,438,2.216,452,1.729,472,2.794,481,2.974,483,5.5,484,3.353,485,1.94,487,1.94,488,1.94,491,3.09,492,3.216,493,3.957,494,2.216,496,2.114,498,3.216,499,2.114,501,2.114,504,3.722,505,2.329,506,2.023,511,5.93,516,2.023,519,2.974,520,2.794,521,2.794,524,2.766,529,2.794,535,2.794,542,3.023,583,2.794,598,1.729,608,2.46,611,3.86,637,2.216,648,2.023,660,2.612,672,3.329,675,3.329,676,4.328,677,4.631,686,3.023,687,2.216,688,3.329,689,5.517,690,3.329,764,2.329,767,3.329,768,3.023,769,5.517,792,3.329,795,3.794,796,3.794,797,3.329,798,3.794,799,3.794,800,3.794,801,4.328,802,3.329,803,3.329,804,3.329,805,3.329,806,3.329,807,4.631,808,3.023,809,3.329,810,3.329,811,3.329,812,3.329,813,3.794,814,3.794,815,3.794,816,3.794,817,3.794,818,3.794,819,3.794,820,3.794,821,3.794,822,3.794,823,3.794,824,3.794,825,3.794,826,3.794,827,3.794]],["keywords/64",[]],["title/65",[10,211.357,100,429.214,139,613.422,306,557.005]],["content/65",[10,3.154,19,2.378,27,5.286,49,3.734,316,2.293,322,8.551,422,7.182,458,6.406,470,5.336,509,6.764,601,5.814,676,7.182,793,7.684,828,10.433,829,9.155,830,9.155,831,10.433,832,9.155,833,13.302,834,10.433]],["keywords/65",[]],["title/66",[234,169.759,452,426.207]],["content/66",[]],["keywords/66",[]],["title/67",[316,146.378,835,934.966]],["content/67",[5,3.499,10,3.754,84,8.548,118,4.128,149,4.439,152,6.46,234,1.704,271,7.251,316,1.944,356,6.912,378,9.145,380,6.912,381,6.121,385,4.439,387,5.48,388,6.46,431,7.478,436,9.894,470,4.8,471,6.46,531,8.235,542,7.478,572,8.235,637,5.48,836,9.385,837,9.385,838,7.478,839,9.385,840,9.385,841,9.385,842,9.385,843,9.385]],["keywords/67",[]],["title/68",[96,274.667,381,411.251]],["content/68",[10,4.05,33,4.332,85,5.451,182,6.495,183,3.786,234,1.915,316,2.217,378,5.451,381,4.64,382,8.693,383,8.459,384,9.22,385,7.164,386,5.898,387,6.159,388,7.261,438,4.322,470,3.786,471,5.095,478,4.125,651,8.404,838,8.404,844,12.289,845,10.548,846,7.402,847,7.402,848,12.289,849,10.548,850,6.495,851,7.402,852,7.402,853,7.402,854,7.402,855,7.402,856,7.402,857,7.402,858,7.402]],["keywords/68",[]],["title/69",[316,109.447,468,318.675,477,429.214,752,613.422]],["content/69",[28,2.527,29,5.12,44,2.443,49,4.4,118,2.616,149,2.814,166,2.965,230,4.74,234,1.965,239,3.652,250,3.042,263,4.101,276,2.289,316,0.931,405,4.381,458,3.652,468,4.095,478,3.315,480,4.381,481,2.814,482,3.474,483,5.32,484,3.172,485,3.042,486,5.006,487,3.042,488,4.595,491,2.923,492,3.042,493,2.923,494,3.474,495,4.381,496,3.315,497,3.652,498,3.042,499,3.315,500,4.381,501,3.315,502,4.381,503,3.652,504,3.57,505,3.652,506,3.172,515,3.652,516,3.172,517,4.381,598,5.498,599,4.74,600,4.095,601,3.315,602,4.74,603,3.856,604,4.381,605,3.652,606,3.652,607,3.652,611,3.652,859,5.948,860,5.948,861,5.948]],["keywords/69",[]],["title/70",[316,146.378,364,744.957]],["content/70",[12,7.943,44,5.306,49,4.279,166,3.29,234,1.81,289,6.889,316,1.561,322,7.544,454,5.682,601,5.556,741,7.943,829,8.748,830,8.748,832,8.748,862,9.969,863,11.336,864,9.969,865,9.969,866,9.969,867,8.748]],["keywords/70",[]],["title/71",[27,277.826,96,205.368,314,408.227,316,109.447]],["content/71",[4,3.146,19,0.974,27,1.697,28,2.944,29,3.277,49,4.389,76,3.403,138,2.494,166,3.649,171,3.146,234,1.826,239,2.622,250,3.544,271,2.494,276,3.364,316,0.669,327,4.046,366,2.94,381,1.879,382,2.622,383,2.94,385,2.02,399,2.02,470,2.184,478,3.861,480,3.146,481,3.277,482,2.494,483,4.296,484,2.278,485,2.184,486,2.38,487,2.184,488,2.184,491,3.405,492,3.544,493,3.405,495,3.146,496,2.38,497,2.622,498,2.184,499,2.38,500,3.146,501,2.38,502,3.146,503,2.622,504,4.394,506,2.278,515,2.622,516,3.695,517,3.146,518,3.748,519,3.277,524,3.845,598,3.159,600,2.94,634,3.748,635,7.671,636,3.748,648,3.695,674,3.146,697,6.439,741,3.403,868,4.271,869,8.742,870,3.748,871,3.748,872,4.271,873,6.08,874,3.403,875,6.08,876,3.748,877,3.748,878,6.929,879,4.271,880,3.748,881,6.929,882,6.929,883,6.929,884,6.929,885,4.271,886,4.271,887,4.271,888,4.271,889,4.271,890,4.271,891,4.271,892,4.271,893,4.271,894,4.271,895,4.271]],["keywords/71",[]],["title/72",[149,330.657,316,109.447,365,514.866,366,481.218]],["content/72",[118,5.113,124,8.001,149,5.498,246,9.261,316,2.228,356,8.561,365,8.561,366,9.796,373,9.261,397,10.199,714,8.561,768,9.261,896,10.199,897,11.624,898,11.624]],["keywords/72",[]],["title/73",[96,330.413]],["content/73",[10,1.65,19,1.917,28,4.9,49,4.336,57,3.756,96,1.603,138,4.911,152,3.756,166,3.807,171,4.018,196,4.347,234,1.863,239,5.164,250,4.302,271,3.186,316,1.607,366,3.756,381,2.4,382,5.164,383,3.756,384,3.756,385,2.581,389,4.347,403,4.788,406,3.756,433,3.756,458,3.35,470,2.791,478,4.687,481,3.978,482,4.911,503,6.301,504,5.629,506,6.15,515,7.081,516,6.15,517,8.494,532,3.756,547,4.788,714,4.018,870,4.788,871,10.12,874,4.347,896,4.788,899,5.456,900,5.456,901,8.411,902,5.456,903,5.456,904,5.456,905,5.456,906,5.456,907,5.456,908,5.456]],["keywords/73",[]],["title/74",[909,896.153]],["content/74",[28,6.465,49,4.406,96,2.414,234,1.492,239,5.044,316,1.286,388,5.655,423,7.209,478,4.578,503,5.044,592,7.209,595,7.209,648,4.381,664,5.326,756,7.209,910,8.216,911,8.216,912,8.216,913,8.216,914,8.216,915,10.359,916,8.216,917,7.209,918,7.209,919,8.216,920,11.349,921,6.546,922,6.546,923,8.216,924,8.216]],["keywords/74",[]],["title/75",[234,126.929,390,514.866,611,429.214,909,557.005]],["content/75",[28,5.651,47,6.764,49,4.348,166,4.39,234,1.894,289,7.093,556,9.155,611,6.406,677,9.797,921,8.313,922,8.313,925,10.433,926,9.155,927,9.155,928,10.433]],["keywords/75",[]],["title/76",[5,231.42,234,112.711,331,362.498,332,331.036,461,427.313]],["content/76",[]],["keywords/76",[]],["title/77",[580,896.153]],["content/77",[39,6.634,49,4.531,316,1.41,317,5.26,331,5.26,332,4.804,470,4.607,584,10.041,929,7.904,930,7.904,931,7.177,932,7.904]],["keywords/77",[]],["title/78",[127,408.227,332,372.796,337,514.866,764,429.214]],["content/78",[8,4.477,27,3.761,33,3.887,118,4.163,124,8.595,127,7.292,149,4.477,234,2.267,304,4.841,316,1.482,331,7.292,332,6.659,337,10.292,371,8.305,389,7.541,436,7.541,461,6.515,538,4.651,687,5.527,764,5.811,797,8.305,933,9.464,934,9.464,935,9.464,936,12.487,937,9.464,938,9.464,939,9.464,940,9.464,941,9.464,942,9.464]],["keywords/78",[]],["title/79",[96,330.413]],["content/79",[7,3.662,19,1.133,49,4.518,166,3.937,276,3.01,316,0.778,317,2.903,334,3.662,337,5.762,470,2.543,504,3.844,524,4.255,584,7.124,596,2.771,598,5.438,674,5.762,695,6.234,915,3.962,930,4.363,931,6.234,932,6.865,943,4.972,944,4.972,945,4.972,946,4.363,947,4.363,948,6.865,949,6.865,950,4.363,951,4.363,952,4.363,953,6.865,954,4.972,955,4.972,956,4.972,957,7.824,958,3.962,959,7.824,960,4.972,961,4.972,962,4.972,963,4.972,964,4.972,965,4.972,966,4.972,967,4.972]],["keywords/79",[]],["title/80",[687,545.977,968,744.957]],["content/80",[10,3.276,19,2.47,27,4.307,88,8.635,124,7.46,127,7.956,250,5.543,331,7.956,332,7.266,469,9.509,637,6.328,687,7.956,764,6.654,838,8.635,915,8.635,968,10.856,969,10.837,970,10.837,971,10.837]],["keywords/80",[]],["title/81",[331,467.159,332,426.613,477,491.175]],["content/81",[19,2.335,44,4.207,75,8.988,152,7.051,250,6.723,304,5.239,314,7.676,331,8.477,332,7.741,381,4.505,433,7.051,454,4.505,458,6.289,509,6.64,687,7.676,850,8.988,874,8.161,929,8.988,972,10.243,973,11.535,974,10.243,975,10.243]],["keywords/81",[]],["title/82",[96,330.413]],["content/82",[5,1.76,8,2.233,10,1.427,19,1.076,33,3.084,44,3.084,49,4.331,68,2.757,97,2.898,104,3.761,112,3.06,152,3.25,166,4.088,261,4.142,276,2.889,304,2.414,314,4.385,316,1.176,332,2.517,334,6.886,381,2.076,385,2.233,433,3.25,454,3.303,461,3.25,472,3.477,477,4.61,478,4.185,503,4.61,504,2.984,509,3.06,519,2.233,524,3.303,589,3.477,598,5.921,600,3.25,601,4.185,603,3.06,612,4.142,648,4.004,674,3.477,687,5.46,694,5.983,697,5.53,876,6.589,877,4.142,880,4.142,931,5.983,946,4.142,947,4.142,948,4.142,949,6.589,950,4.142,951,4.142,952,4.142,953,4.142,958,3.761,968,3.761,976,4.721,977,4.721,978,4.721,979,4.721,980,4.721,981,6.589,982,4.721,983,6.589,984,4.142,985,6.589,986,9.351,987,4.721,988,6.589,989,4.721,990,4.721,991,4.721,992,4.721,993,4.721,994,4.142,995,4.721,996,4.721,997,4.721,998,4.721,999,3.06,1000,4.721]],["keywords/82",[]],["title/83",[44,254.978,234,112.711,306,494.61,454,273.048,1001,494.61]],["content/83",[44,5.453,454,5.839,509,8.607,973,11.649,1001,10.578]],["keywords/83",[]],["title/84",[96,330.413]],["content/84",[44,3.828,49,4.394,166,4.079,234,1.692,276,2.404,304,3.195,316,1.935,433,4.3,438,3.648,454,4.099,458,3.835,504,5.255,524,2.748,526,5.481,598,5.082,601,5.194,603,4.05,694,7.426,875,5.481,958,4.977,981,5.481,983,5.481,984,8.178,985,5.481,986,10.846,988,8.178,994,9.782,1001,4.977,1002,6.247,1003,6.247,1004,6.247,1005,5.481,1006,9.32,1007,9.32,1008,4.601,1009,9.32,1010,6.247,1011,6.247,1012,5.481,1013,5.481,1014,5.481,1015,6.247,1016,6.247,1017,6.247]],["keywords/84",[]],["title/85",[234,126.929,324,318.675,399,330.657,643,557.005]],["content/85",[]],["keywords/85",[]],["title/86",[580,896.153]],["content/86",[49,4.553,87,6.017,150,6.017,201,6.017,263,2.568,316,1.182,317,4.41,324,4.877,519,3.572,581,6.626,584,9.151,585,6.626,586,6.626,801,5.198,1018,7.551]],["keywords/86",[]],["title/87",[316,97.187,324,282.978,538,305.076,1019,620.765,1020,620.765]],["content/87",[271,7.402,316,1.984,324,5.778,409,8.725,519,5.995,538,6.229,587,11.122,1021,10.099,1022,12.675]],["keywords/87",[]],["title/88",[314,545.977,324,426.207]],["content/88",[230,10.454,250,6.71,324,5.981,467,9.663,468,5.981,1023,11.513]],["keywords/88",[]],["title/89",[96,330.413]],["content/89",[8,1.535,18,1.992,19,1.257,28,2.343,29,4.494,33,3.483,46,2.585,49,4.386,57,3.796,97,4.415,118,1.427,138,1.895,160,2.39,166,3.828,234,0.589,263,1.875,276,2.767,289,1.73,316,0.863,324,3.278,346,2.847,381,1.427,385,3.401,390,2.39,396,2.39,399,1.535,438,1.895,446,1.992,468,2.514,481,2.608,483,4.67,484,2.941,485,2.82,487,2.82,488,2.82,491,2.71,492,2.82,493,2.71,494,3.22,496,3.073,498,2.82,499,3.073,501,3.073,504,4.379,505,3.386,506,3.835,516,3.835,524,3.73,582,3.386,583,4.061,596,1.808,598,3.278,605,1.992,606,1.992,607,1.992,608,3.575,617,2.104,628,2.104,633,2.104,637,3.22,648,2.941,660,3.796,661,2.39,662,2.39,663,2.39,665,2.39,667,2.39,668,2.39,753,2.847,801,7.585,802,4.839,803,2.847,804,2.847,805,6.31,806,4.839,807,8.116,808,5.729,809,4.839,810,4.839,811,4.839,812,4.839,867,2.847,917,2.847,918,2.847,927,2.847,999,3.575,1023,2.847,1024,7.571,1025,3.245,1026,3.245,1027,4.394,1028,2.847,1029,2.847,1030,2.847,1031,3.245,1032,2.847,1033,2.847,1034,2.847,1035,3.245,1036,3.245,1037,3.245,1038,3.245]],["keywords/89",[]],["title/90",[909,896.153]],["content/90",[33,3.503,47,5.529,49,4.364,166,4.702,234,1.548,289,8.208,324,3.888,353,10.217,524,6.266,801,5.87,807,8.575,921,6.795,922,6.795,926,7.483,1024,6.795,1027,9.277,1039,8.528,1040,11.643,1041,8.528,1042,8.528,1043,8.528,1044,8.528]],["keywords/90",[]],["title/91",[234,145.253,1045,799.994,1046,550.688]],["content/91",[]],["keywords/91",[]],["title/92",[263,237.713,1047,699.075,1048,699.075,1049,514.866]],["content/92",[19,1.514,28,1.98,29,2.204,30,1.377,33,1.394,49,4.412,77,1.49,85,3.432,96,0.549,118,1.493,120,1.49,127,1.982,129,1.377,135,5.982,149,2.204,166,4.522,171,1.377,183,0.956,234,0.616,263,1.584,276,0.72,304,0.956,307,1.641,316,0.73,322,1.982,387,4.743,406,1.287,414,5.591,431,1.49,437,1.641,446,1.148,450,1.641,452,0.852,454,0.822,478,2.597,481,0.884,483,2.29,484,0.997,485,2.383,486,1.891,487,0.956,488,0.956,491,0.919,492,0.956,493,2.815,494,1.092,496,1.042,498,2.93,499,5.895,501,4.141,504,4.345,505,2.861,506,3.963,509,1.212,510,1.49,515,2.861,516,5.201,524,4.809,534,5.265,560,1.641,582,2.084,596,1.042,608,1.212,610,1.49,617,1.212,618,1.49,628,1.212,633,1.212,637,1.092,648,4.331,657,4.564,660,1.287,661,1.377,662,1.377,663,1.377,664,3.021,665,5.982,666,3.713,667,3.432,668,3.432,669,3.713,670,3.713,671,3.713,676,3.208,685,1.49,714,1.377,758,1.641,760,3.713,764,1.148,863,1.641,999,2.2,1005,1.641,1008,2.5,1021,4.564,1046,1.287,1049,7.502,1050,1.87,1051,1.87,1052,1.87,1053,3.713,1054,1.641,1055,1.641,1056,8.116,1057,5.828,1058,1.641,1059,3.394,1060,5.728,1061,6.521,1062,5.828,1063,8.122,1064,4.66,1065,5.728,1066,1.87,1067,1.87,1068,1.87,1069,1.87,1070,1.87,1071,3.394,1072,1.87,1073,1.87,1074,1.87,1075,3.394,1076,1.87,1077,1.87,1078,1.87,1079,1.87,1080,1.87,1081,1.87,1082,1.87,1083,3.394,1084,1.87,1085,1.87,1086,3.394,1087,1.87,1088,1.87,1089,1.87,1090,1.87,1091,1.87,1092,1.87,1093,1.87,1094,1.87]],["keywords/92",[]],["title/93",[324,426.207,1046,643.598]],["content/93",[10,1.761,19,1.328,33,3.632,49,4.365,160,4.29,166,4.772,234,1.058,276,2.241,289,3.106,316,0.912,324,2.655,385,5.055,406,4.01,454,2.562,504,4.247,506,4.715,516,4.715,524,3.889,633,3.776,651,4.641,760,4.641,801,6.087,807,7.871,808,4.641,999,5.732,1012,5.111,1013,5.111,1014,7.759,1024,9.508,1027,7.045,1028,5.111,1029,5.111,1030,5.111,1032,5.111,1033,5.111,1034,5.111,1046,6.087,1049,6.512,1054,5.111,1055,5.111,1056,4.641,1095,5.825,1096,5.825,1097,10.687,1098,5.825,1099,5.825,1100,5.825,1101,5.825,1102,5.825,1103,5.825,1104,10.687,1105,5.825,1106,5.825,1107,5.825]],["keywords/93",[]],["title/94",[18,429.214,316,109.447,327,408.227,1046,481.218]],["content/94",[18,2.428,19,0.901,28,4.081,29,3.078,44,2.673,49,4.366,96,1.162,97,2.428,135,6.105,154,6.105,166,4.311,183,2.023,234,1.928,276,1.522,289,2.109,316,1.019,317,2.309,327,4.841,390,4.792,399,1.87,438,3.8,452,1.803,454,1.739,481,1.87,483,3.198,484,2.109,491,1.943,493,1.943,504,3.295,519,1.87,520,2.913,521,2.913,529,4.792,532,4.479,534,6.228,535,2.913,589,2.913,648,5.662,655,9.099,657,6.605,664,2.564,676,4.479,677,4.792,678,3.47,679,3.47,680,3.47,683,3.47,685,3.151,686,3.151,687,2.309,724,5.709,725,10.02,793,4.792,873,3.47,999,4.218,1008,2.913,1049,7.82,1053,3.151,1056,8.46,1057,5.709,1058,3.47,1108,3.955,1109,6.507,1110,3.955,1111,3.955,1112,8.29,1113,5.709,1114,3.955,1115,5.709,1116,6.507,1117,6.507,1118,3.955,1119,6.507,1120,3.955,1121,6.507,1122,3.955,1123,3.47,1124,7.274,1125,3.47]],["keywords/94",[]],["title/95",[316,146.378,1126,934.966]],["content/95",[19,1.208,20,2.507,33,2.178,44,3.379,49,4.407,112,5.333,154,6.058,166,4.058,234,0.963,277,4.652,316,0.83,438,3.096,468,3.75,504,2.107,519,2.507,524,5.97,532,3.649,534,5.333,596,4.584,598,3.75,633,3.437,648,4.386,655,4.224,664,7.363,695,4.224,718,4.652,793,3.904,999,3.437,1008,3.904,1021,4.224,1053,4.224,1061,8.844,1062,4.652,1113,4.652,1115,4.652,1123,4.652,1124,4.652,1125,4.652,1127,8.226,1128,5.301,1129,8.226,1130,8.226,1131,8.226,1132,10.079,1133,8.226,1134,12.295,1135,11.358,1136,5.301,1137,5.301,1138,5.301,1139,8.226,1140,8.226,1141,5.301,1142,5.301]],["keywords/95",[]]],"invertedIndex":[["",{"_index":49,"title":{"9":{"position":[[4,1]]}},"content":{"4":{"position":[[283,1]]},"17":{"position":[[322,2],[330,1],[332,1],[530,1]]},"18":{"position":[[292,1],[294,3],[305,1],[334,3],[410,3],[414,1],[416,1],[507,1],[641,1]]},"19":{"position":[[108,1],[119,1],[227,2],[230,1],[551,3]]},"43":{"position":[[218,1],[399,1],[401,1],[428,3],[432,1],[449,3],[465,1],[544,3],[574,1],[636,2],[639,3],[643,1],[645,3],[649,1],[685,2],[723,1],[781,1],[783,2],[882,2],[992,1],[1037,1],[1088,1],[1106,1],[1146,3],[1150,1],[1152,1],[1229,1],[1403,1],[1405,1],[1432,3],[1436,1],[1453,3],[1457,1],[1482,1],[1484,2],[1493,1],[1512,1],[1595,1],[1663,1],[1723,1],[1784,2],[1795,1],[1853,1],[1855,2],[1964,2],[1975,1],[2068,2],[2071,2],[2074,1]]},"49":{"position":[[48,3],[61,1],[63,3],[80,1],[82,1],[84,3],[96,1],[98,1],[100,1],[102,3],[124,1],[126,1],[128,1],[130,1],[132,3],[146,1],[148,1],[150,1],[152,1],[154,1],[156,3],[187,1],[189,1],[191,1],[193,1],[195,1],[197,3],[219,1],[221,1],[223,1],[225,1],[227,1],[229,3],[253,1],[255,1],[257,1],[259,1],[261,1],[263,3],[276,1],[278,1],[280,1],[282,3],[306,1],[308,1],[310,1],[312,3],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3]]},"52":{"position":[[95,1],[116,1],[143,1],[160,1],[191,1],[216,1],[244,2],[329,1],[358,1],[427,1],[570,1],[572,1],[599,3],[603,1],[620,3],[624,2],[736,1],[796,2],[905,3],[935,1],[997,2],[1000,3],[1004,1],[1006,1]]},"53":{"position":[[203,1],[224,1],[246,1],[282,1],[318,1],[354,1],[378,2],[470,1],[491,1],[528,1],[555,1],[592,1],[677,1],[710,1],[777,1],[798,3],[802,1],[836,2],[869,1],[1093,1],[1120,3],[1124,1],[1141,3],[1145,2],[1263,1],[1313,1],[1378,2],[1392,1],[1461,2],[1464,1],[1466,3],[1470,1],[1520,2],[1542,1],[1544,2],[1624,1],[1673,1],[1675,1],[1677,2],[1720,1],[1779,2],[1828,1],[1890,1],[1917,3],[1921,1],[1938,3],[1942,1],[1979,1],[2053,1],[2055,1]]},"56":{"position":[[547,2],[632,1],[661,1],[721,1],[907,1],[909,1],[936,3],[940,1],[957,3],[973,1],[1038,2],[1047,1],[1156,3],[1160,2],[1163,3],[1167,1],[1169,3],[1173,1],[1211,2],[1241,1],[1299,1],[1350,1],[1368,1],[1388,1],[1460,1],[1512,1],[1517,1],[1597,1],[1599,1],[1655,1],[1666,3],[1670,1],[1672,1],[1717,2],[1811,1],[1873,1],[1933,1],[1959,1],[2102,1],[2104,1],[2131,3],[2135,1],[2152,3],[2156,1],[2176,1],[2178,2],[2187,1],[2241,1],[2319,1],[2403,1],[2440,1],[2445,1],[2537,1],[2539,1],[2619,2],[2630,1],[2727,2],[2730,2],[2755,1],[2757,2],[2766,1],[2790,1],[2798,2],[2824,1],[2826,2],[2835,1],[2859,1],[2868,2],[2871,1],[2900,1],[3031,1],[3033,1],[3047,2],[3072,1],[3089,2],[3105,1],[3113,2],[3162,2],[3165,1],[3212,1],[3435,2],[3438,3]]},"57":{"position":[[319,1],[321,3],[325,1],[355,1],[357,3],[369,1],[383,3],[387,1],[408,1],[410,3],[427,1],[447,1],[604,1],[606,3],[610,1],[649,1],[651,3],[669,1],[689,3],[693,1],[740,1],[742,3],[758,1],[776,1],[894,1],[915,1],[981,1],[983,3],[987,1],[1026,1],[1028,3],[1046,1],[1082,3],[1086,1],[1133,1],[1135,3],[1151,1],[1185,3],[1189,1],[1224,1],[1226,3],[1238,1],[1252,1]]},"61":{"position":[[176,2],[261,1],[290,1],[350,1],[536,1],[538,1],[565,3],[569,1],[586,3],[602,1],[648,2],[751,2],[760,1],[913,3],[917,2],[920,3],[924,1],[926,3],[930,1],[968,2],[998,1],[1056,1],[1107,1],[1125,1],[1145,1],[1217,1],[1269,1],[1274,1],[1354,1],[1356,1],[1412,1],[1423,3],[1427,1],[1429,1]]},"62":{"position":[[102,2],[194,1],[215,1],[252,1],[279,1],[309,3],[313,1],[347,2],[380,1],[604,1],[631,3],[635,1],[652,3],[656,2],[774,1],[824,1],[889,2],[903,1],[972,2],[975,1],[977,3],[981,1],[1031,2],[1053,1],[1055,2],[1135,1],[1184,1],[1186,1]]},"63":{"position":[[121,1],[141,1],[162,1],[207,1],[266,1],[352,2],[355,4],[367,1],[621,2],[726,2],[729,3]]},"64":{"position":[[543,1],[563,1],[617,1],[765,1],[767,1],[794,3],[798,1],[815,3],[831,1],[898,2],[907,1],[969,2],[972,3],[976,1],[978,3],[982,1],[1011,2],[1033,1],[1114,1],[1136,1],[1223,2],[1256,1],[1293,1],[1304,3],[1308,1],[1489,1],[1515,1],[1702,1],[1704,1],[1731,3],[1735,1],[1752,3],[1756,1],[1786,1],[1841,1],[1854,1],[1856,2],[1865,1],[1887,1],[1982,1],[2048,1],[2116,1],[2173,1],[2259,2],[2262,2],[2287,1],[2289,2],[2298,1],[2322,1],[2330,2],[2356,1],[2358,2],[2367,1],[2391,1],[2400,2],[2403,1]]},"65":{"position":[[179,1],[181,1],[245,2]]},"69":{"position":[[181,1],[202,1],[229,1],[246,1],[277,1],[302,1],[330,2],[415,1],[444,1],[513,1],[656,1],[658,1],[685,3],[689,1],[706,3],[722,1],[801,3],[831,1],[893,2],[896,3],[900,1],[902,3],[906,1],[942,2],[980,1],[1038,1],[1089,1],[1091,2],[1127,1],[1129,2],[1209,3],[1213,1],[1215,1]]},"70":{"position":[[59,1],[61,1],[83,3],[87,1],[114,2],[134,3],[138,1],[192,2],[238,2]]},"71":{"position":[[249,1],[359,1],[361,1],[388,3],[392,1],[409,3],[490,3],[520,1],[582,2],[585,3],[589,1],[591,3],[595,1],[631,2],[669,1],[734,1],[785,1],[803,1],[843,3],[847,1],[849,1],[947,1],[958,1],[991,1],[1010,1],[1070,1],[1090,1],[1099,1],[1313,1],[1338,2],[1341,3],[1607,1],[1669,1],[1696,3],[1700,1],[1717,3],[1721,1],[1758,1],[1832,1],[1834,1],[1915,1],[1935,1],[1943,2],[1968,2],[1971,1],[2005,1],[2077,1],[2177,2],[2218,2],[2221,3]]},"73":{"position":[[264,1],[266,3],[305,1],[370,1],[421,1],[439,1],[479,3],[483,1],[523,1],[588,1],[639,1],[657,1],[697,3],[701,1],[736,1],[801,1],[852,1],[870,1],[910,3],[914,1],[916,1],[1248,1],[1250,3],[1289,1],[1354,1],[1405,1],[1423,1],[1463,3],[1467,1],[1469,1]]},"74":{"position":[[288,1],[332,1],[334,3],[338,1],[367,1],[369,3],[373,1],[400,1],[402,3],[406,1],[444,1],[446,3],[450,1],[454,1],[493,1],[495,3],[499,1],[527,1],[529,3],[533,1]]},"75":{"position":[[68,1],[100,1],[125,1],[127,3],[131,1],[135,1],[170,1],[195,1],[197,3],[201,1]]},"77":{"position":[[72,3],[85,1],[87,3],[104,1],[106,1],[108,3],[122,1],[124,1],[126,1],[128,3],[146,1],[148,1],[150,1],[152,1],[154,3],[175,1],[177,1],[179,1],[181,1],[183,3],[210,1],[212,1],[214,1],[216,1],[218,3],[231,1],[233,1],[235,1],[237,3],[250,1],[252,1],[254,3]]},"79":{"position":[[58,3],[75,1],[77,3],[88,1],[90,1],[92,3],[103,1],[105,1],[107,1],[109,3],[128,1],[130,1],[132,3],[142,1],[144,1],[146,1],[148,3],[164,3],[177,1],[179,3],[196,1],[198,1],[200,3],[214,1],[216,1],[218,1],[220,3],[238,1],[240,1],[242,1],[244,1],[246,3],[267,1],[269,1],[271,1],[273,1],[275,3],[302,1],[304,1],[306,1],[308,1],[310,3],[323,1],[325,1],[327,1],[329,3],[342,1],[344,1],[346,3],[408,1],[429,1],[463,1],[481,1],[541,1],[543,2],[552,1],[561,1],[641,2],[644,2],[723,1],[759,1],[793,1],[811,1],[844,1],[868,1],[929,1],[931,2],[940,1],[948,1],[953,1],[955,1],[985,1],[1055,1],[1064,1],[1171,2],[1174,2]]},"82":{"position":[[494,1],[506,1],[529,1],[540,1],[573,1],[599,1],[632,1],[675,1],[708,1],[726,1],[769,1],[771,1],[794,2],[826,1],[849,2],[865,1],[874,1],[1013,1],[1071,2],[1095,1],[1173,2],[1176,2],[1185,2],[1188,2],[1232,2],[1235,3],[1482,1],[1503,1],[1537,1],[1555,1],[1615,1],[1617,2],[1626,1],[1635,1],[1715,2],[1718,2]]},"84":{"position":[[8,1],[22,1],[60,1],[73,1],[103,1],[128,1],[162,1],[164,1],[190,3],[194,1],[268,2],[339,2],[342,3],[346,1],[415,2],[447,1],[449,2],[488,2],[504,1],[532,1],[551,1],[590,1],[632,1],[656,3],[697,1],[775,1],[799,3],[842,1],[932,1],[994,2]]},"86":{"position":[[44,3],[57,1],[59,3],[76,1],[78,1],[80,3],[92,1],[94,1],[96,1],[98,3],[120,1],[122,1],[124,1],[126,1],[128,3],[142,1],[144,1],[146,1],[148,1],[150,3],[161,1],[163,1],[165,1],[167,1],[169,1],[171,3],[194,1],[196,1],[198,1],[200,1],[202,1],[204,3],[228,1],[230,1],[232,1],[234,1],[236,1],[238,3],[251,1],[253,1],[255,1],[257,3],[281,1],[283,1],[285,1],[287,3],[300,1],[302,1],[304,3],[317,1],[319,1],[321,3]]},"89":{"position":[[525,2],[612,1],[625,1],[686,1],[688,1],[737,1],[776,1],[798,1],[849,1],[870,1],[924,1],[1002,1],[1055,1],[1066,3],[1258,1],[1278,1],[1332,1],[1480,1],[1482,1],[1509,3],[1513,1],[1530,3],[1546,1],[1613,2],[1622,1],[1684,2],[1687,3],[1691,1],[1693,3],[1697,1],[1726,2],[1748,1],[1829,1],[1851,1],[1938,2],[1971,1],[2008,1],[2019,3],[2023,1],[2112,1],[2132,1],[2184,1],[2381,1],[2383,1],[2410,3],[2414,1],[2431,3],[2447,1],[2512,2],[2521,1],[2674,3],[2678,2],[2681,3],[2685,1],[2687,3],[2691,1],[2728,2],[2756,1],[2789,1],[2847,1],[2869,1],[2956,2],[2989,1],[3026,1],[3046,1],[3117,1],[3169,1],[3180,3],[3184,2],[3187,1]]},"90":{"position":[[32,1],[41,3],[45,1],[75,2],[105,1],[128,6],[135,3],[139,1],[172,2],[199,1],[255,6],[264,1],[296,1],[319,6],[351,1],[407,6]]},"92":{"position":[[47,1],[233,1],[235,1],[262,3],[266,1],[283,3],[299,1],[364,2],[373,1],[482,3],[486,2],[489,3],[493,1],[495,3],[499,1],[537,2],[567,1],[625,1],[676,1],[694,1],[714,1],[786,1],[838,1],[843,1],[923,1],[925,1],[981,1],[992,3],[996,1],[998,1],[1176,2],[1185,1],[1225,2],[1234,4],[1239,3],[1433,1],[1491,1],[1493,2],[1580,1],[1598,1],[1618,1],[1666,2],[1740,1],[1792,1],[1794,2],[1860,1],[1940,1],[1942,1],[1998,1],[2000,2],[2107,3],[2111,1],[2169,2],[2178,1],[2218,2],[2227,1],[2265,2],[2274,1],[2282,1],[2288,1],[2290,1],[2320,3],[2374,3],[2426,2],[2435,4],[2501,2],[2510,4],[2590,2],[2599,4],[2700,2],[2709,4],[2714,3],[2718,3],[2908,2],[2917,1],[2931,1],[2939,2],[2964,2],[2967,1],[3050,2],[3059,1],[3081,1],[3130,1],[3173,1],[3219,2],[3270,2],[3279,2],[3291,4],[3296,3],[3322,1],[3377,2],[3430,2],[3492,2],[3495,3],[3509,1],[3579,2],[3629,1],[3635,2],[3638,2],[3679,2],[3688,1],[3726,2],[3735,1],[3743,1],[3749,1],[3751,1],[3781,3],[3835,3],[3839,3],[3843,3],[4170,2],[4179,1],[4187,1],[4193,1],[4195,1],[4240,1],[4254,2],[4257,3],[4386,2],[4389,3],[4495,1],[4553,1],[4604,1],[4622,1],[4642,1],[4714,1],[4766,1],[4771,1],[4851,1],[4853,1],[4909,1],[4911,2],[4961,3],[4965,1],[5155,2],[5164,1],[5172,1],[5178,1],[5180,1],[5225,1],[5296,1],[5331,2],[5334,3],[5338,2],[5341,3],[5395,3]]},"93":{"position":[[254,1],[256,1],[305,1],[344,1],[366,1],[417,1],[438,1],[492,1],[497,1],[580,1],[582,1],[635,1],[646,3],[682,2],[691,1],[717,2],[726,1],[771,2],[780,1],[799,1],[932,3],[989,2],[998,4],[1064,2],[1073,4],[1078,3],[1129,1],[1196,2],[1205,4],[1210,3]]},"94":{"position":[[265,1],[295,1],[405,1],[407,1],[435,1],[455,1],[480,1],[482,2],[621,1],[694,1],[696,2],[795,1],[882,1],[884,1],[886,1],[923,1],[925,2],[1030,1],[1123,1],[1125,1],[1127,1],[1207,2],[1218,1],[1220,2],[1428,2],[1431,2],[1460,1],[1462,2],[1471,1],[1499,1],[1507,2],[1537,1],[1539,2],[1548,1],[1576,1],[1585,2],[1588,1],[1644,2],[1653,1],[1693,2],[1702,1],[1783,2],[1792,4],[1885,2],[1894,4],[1993,2],[2002,4],[2112,2],[2121,4],[2126,3],[2130,3]]},"95":{"position":[[150,1],[161,1],[199,1],[249,1],[306,2],[315,1],[355,2],[364,1],[378,1],[427,1],[446,1],[480,1],[558,1],[576,2],[579,2],[661,2],[670,1],[672,2],[754,1],[798,1],[842,2],[845,3],[855,1],[868,1],[870,1],[972,3],[1064,2],[1073,1],[1075,2],[1183,1],[1227,1],[1305,2],[1308,2],[1311,3],[1321,1],[1327,1],[1329,1],[1407,3],[1411,3],[1415,3]]}},"keywords":{}}],["0",{"_index":311,"title":{},"content":{"20":{"position":[[201,1]]}},"keywords":{}}],["1",{"_index":1092,"title":{},"content":{"92":{"position":[[5312,2]]}},"keywords":{}}],["2",{"_index":1094,"title":{},"content":{"92":{"position":[[5329,1]]}},"keywords":{}}],["20.05.2024",{"_index":849,"title":{},"content":{"68":{"position":[[555,10],[764,10]]}},"keywords":{}}],["2fa",{"_index":415,"title":{"42":{"position":[[0,3]]}},"content":{"34":{"position":[[301,3],[483,4]]},"43":{"position":[[74,4],[967,3],[1914,3],[1958,5]]}},"keywords":{}}],["80",{"_index":259,"title":{},"content":{"18":{"position":[[314,3],[325,8]]}},"keywords":{}}],["__env__",{"_index":163,"title":{},"content":{"13":{"position":[[416,7]]},"19":{"position":[[110,8]]}},"keywords":{}}],["abac",{"_index":339,"title":{"31":{"position":[[12,4]]},"32":{"position":[[17,5]]},"34":{"position":[[9,4]]}},"content":{"32":{"position":[[64,4],[303,5],[506,5]]},"33":{"position":[[620,4]]}},"keywords":{}}],["acceptableag",{"_index":807,"title":{},"content":{"64":{"position":[[1035,15],[1157,14]]},"89":{"position":[[690,15],[781,16],[987,14],[1750,15],[1872,14],[2758,16],[2890,14]]},"90":{"position":[[201,15],[353,15]]},"93":{"position":[[258,15],[349,16],[566,13]]}},"keywords":{}}],["access",{"_index":351,"title":{},"content":{"32":{"position":[[86,6],[121,6]]}},"keywords":{}}],["account",{"_index":720,"title":{},"content":{"57":{"position":[[437,9]]}},"keywords":{}}],["add_head",{"_index":260,"title":{},"content":{"18":{"position":[[338,10]]}},"keywords":{}}],["addingtoshelf",{"_index":664,"title":{},"content":{"56":{"position":[[1225,15]]},"61":{"position":[[40,13],[982,15]]},"74":{"position":[[351,15]]},"92":{"position":[[551,15],[1417,15],[4479,15]]},"94":{"position":[[96,13]]},"95":{"position":[[703,13],[800,14],[1106,13],[1229,14]]}},"keywords":{}}],["addtoshelf",{"_index":678,"title":{},"content":{"56":{"position":[[2165,10],[3116,11]]},"94":{"position":[[444,10]]}},"keywords":{}}],["admin",{"_index":334,"title":{},"content":{"30":{"position":[[1,5]]},"57":{"position":[[375,7],[1244,7]]},"79":{"position":[[96,6]]},"82":{"position":[[320,6],[408,7],[1332,7]]}},"keywords":{}}],["admin/createbook",{"_index":976,"title":{},"content":{"82":{"position":[[37,18]]}},"keywords":{}}],["admin/createbookbook/read",{"_index":943,"title":{},"content":{"79":{"position":[[28,28]]}},"keywords":{}}],["administr",{"_index":497,"title":{},"content":{"43":{"position":[[507,17]]},"51":{"position":[[277,15]]},"52":{"position":[[778,17]]},"53":{"position":[[939,15]]},"62":{"position":[[450,15]]},"69":{"position":[[764,17]]},"71":{"position":[[453,17]]}},"keywords":{}}],["administrationact",{"_index":503,"title":{},"content":{"43":{"position":[[699,23]]},"51":{"position":[[222,21]]},"69":{"position":[[956,23]]},"71":{"position":[[645,23]]},"73":{"position":[[1133,22],[1265,23],[1520,21]]},"74":{"position":[[308,23]]},"82":{"position":[[165,22],[340,21]]}},"keywords":{}}],["administrationactionsдоступ",{"_index":916,"title":{},"content":{"74":{"position":[[152,27]]}},"keywords":{}}],["administrationpolici",{"_index":612,"title":{},"content":{"52":{"position":[[865,20]]},"82":{"position":[[115,20]]}},"keywords":{}}],["administrationpolicypermiss",{"_index":594,"title":{},"content":{"51":{"position":[[311,30]]}},"keywords":{}}],["administrationpolicystor",{"_index":482,"title":{},"content":{"43":{"position":[[192,25]]},"49":{"position":[[160,26]]},"52":{"position":[[401,25]]},"53":{"position":[[712,26],[955,26]]},"62":{"position":[[466,26]]},"69":{"position":[[487,25]]},"71":{"position":[[223,25]]},"73":{"position":[[238,25],[1222,25]]}},"keywords":{}}],["adminrouteguard",{"_index":931,"title":{},"content":{"77":{"position":[[158,16]]},"79":{"position":[[250,16],[465,15]]},"82":{"position":[[810,15],[1539,15]]}},"keywords":{}}],["agepermiss",{"_index":809,"title":{},"content":{"64":{"position":[[1122,13]]},"89":{"position":[[1837,13],[2855,13]]}},"keywords":{}}],["agepermission.isallow",{"_index":811,"title":{},"content":{"64":{"position":[[1229,26]]},"89":{"position":[[1944,26],[2962,26]]}},"keywords":{}}],["allow",{"_index":516,"title":{},"content":{"43":{"position":[[1097,8]]},"56":{"position":[[1359,8],[1657,8]]},"61":{"position":[[1116,8],[1414,8]]},"64":{"position":[[1295,8]]},"69":{"position":[[1118,8]]},"71":{"position":[[794,8],[1207,7]]},"73":{"position":[[430,8],[648,8],[861,8],[1414,8]]},"89":{"position":[[1057,8],[2010,8],[3171,8]]},"92":{"position":[[685,8],[983,8],[1384,5],[1589,8],[2098,8],[4411,5],[4613,8],[4919,5],[4952,8],[4985,5]]},"93":{"position":[[180,5],[637,8]]}},"keywords":{}}],["allowadministrationrout",{"_index":902,"title":{},"content":{"73":{"position":[[496,26]]}},"keywords":{}}],["allowedcount",{"_index":1093,"title":{},"content":{"92":{"position":[[5315,13]]}},"keywords":{}}],["alpin",{"_index":213,"title":{},"content":{"17":{"position":[[248,6]]}},"keywords":{}}],["amp;&",{"_index":894,"title":{},"content":{"71":{"position":[[2066,10]]}},"keywords":{}}],["api",{"_index":364,"title":{"70":{"position":[[0,3]]}},"content":{"32":{"position":[[339,3]]},"34":{"position":[[40,3]]}},"keywords":{}}],["apiurl",{"_index":295,"title":{},"content":{"19":{"position":[[358,7]]}},"keywords":{}}],["apiна",{"_index":430,"title":{},"content":{"36":{"position":[[268,5]]}},"keywords":{}}],["app",{"_index":771,"title":{},"content":{"63":{"position":[[117,3]]}},"keywords":{}}],["applic",{"_index":7,"title":{},"content":{"1":{"position":[[30,12]]},"19":{"position":[[307,11]]},"63":{"position":[[52,11]]},"79":{"position":[[62,12]]}},"keywords":{}}],["application/app.tsx",{"_index":770,"title":{},"content":{"63":{"position":[[82,19]]}},"keywords":{}}],["application/pages/admin/createbook.tsx",{"_index":946,"title":{},"content":{"79":{"position":[[361,38]]},"82":{"position":[[1435,38]]}},"keywords":{}}],["application/pages/book/reading.tsx",{"_index":954,"title":{},"content":{"79":{"position":[[680,34]]}},"keywords":{}}],["astral/permiss",{"_index":468,"title":{"39":{"position":[[14,20]]},"52":{"position":[[33,20]]},"69":{"position":[[33,20]]}},"content":{"39":{"position":[[59,20]]},"52":{"position":[[247,19],[365,22]]},"53":{"position":[[397,19],[498,22],[562,22]]},"56":{"position":[[550,19],[668,22]]},"57":{"position":[[457,19],[922,22]]},"61":{"position":[[179,19],[297,22]]},"62":{"position":[[121,19],[222,22],[286,22]]},"69":{"position":[[333,19],[451,22]]},"88":{"position":[[48,20]]},"89":{"position":[[528,19],[632,22]]},"95":{"position":[[121,20],[256,22]]}},"keywords":{}}],["astral/vit",{"_index":319,"title":{},"content":{"22":{"position":[[27,11]]},"23":{"position":[[27,11]]},"24":{"position":[[27,11]]},"25":{"position":[[27,11]]},"26":{"position":[[27,11]]},"27":{"position":[[27,11]]},"28":{"position":[[27,11]]},"29":{"position":[[27,11]]}},"keywords":{}}],["async",{"_index":499,"title":{},"content":{"43":{"position":[[538,5]]},"52":{"position":[[899,5]]},"56":{"position":[[1032,5]]},"61":{"position":[[745,5]]},"64":{"position":[[892,5]]},"69":{"position":[[795,5]]},"71":{"position":[[484,5]]},"89":{"position":[[1607,5],[2506,5]]},"92":{"position":[[358,5],[2259,5],[2420,5],[2495,5],[2584,5],[2694,5],[2933,5],[3264,5],[3424,5],[3720,5],[4164,5],[5149,5]]}},"keywords":{}}],["attribut",{"_index":349,"title":{},"content":{"32":{"position":[[69,10]]}},"keywords":{}}],["auth",{"_index":476,"title":{"42":{"position":[[16,5]]}},"content":{},"keywords":{}}],["authstore.addprotectedhttpclients([apihttpcli",{"_index":777,"title":{},"content":{"63":{"position":[[300,51]]}},"keywords":{}}],["autobind",{"_index":492,"title":{},"content":{"43":{"position":[[434,9],[1438,9]]},"52":{"position":[[605,9]]},"53":{"position":[[1126,9],[1923,9]]},"56":{"position":[[942,9],[2137,9]]},"61":{"position":[[571,9]]},"62":{"position":[[637,9]]},"64":{"position":[[800,9],[1737,9]]},"69":{"position":[[691,9]]},"71":{"position":[[394,9],[1702,9]]},"89":{"position":[[1515,9],[2416,9]]},"92":{"position":[[268,9]]}},"keywords":{}}],["await",{"_index":501,"title":{},"content":{"43":{"position":[[576,5]]},"52":{"position":[[937,5]]},"56":{"position":[[1049,5]]},"61":{"position":[[762,5]]},"64":{"position":[[909,5]]},"69":{"position":[[833,5]]},"71":{"position":[[522,5]]},"89":{"position":[[1624,5],[2523,5]]},"92":{"position":[[375,5],[2292,5],[3582,5],[3753,5],[4197,5],[5182,5]]}},"keywords":{}}],["base",{"_index":350,"title":{},"content":{"32":{"position":[[80,5],[115,5]]}},"keywords":{}}],["bash",{"_index":176,"title":{},"content":{"13":{"position":[[803,4],[819,4]]},"15":{"position":[[110,4]]},"17":{"position":[[65,4]]}},"keywords":{}}],["billinginfo",{"_index":665,"title":{},"content":{"56":{"position":[[1376,11]]},"61":{"position":[[1133,11]]},"89":{"position":[[3034,11]]},"92":{"position":[[702,11],[1606,11],[2951,12],[2987,13],[4227,12],[4630,11],[5212,12]]}},"keywords":{}}],["billinginfo.info.shelf.allowedcount",{"_index":670,"title":{},"content":{"56":{"position":[[1561,35]]},"61":{"position":[[1318,35]]},"92":{"position":[[887,35],[1904,35],[4815,35]]}},"keywords":{}}],["billinginfo.info.shelf.currentcount",{"_index":669,"title":{},"content":{"56":{"position":[[1519,35]]},"61":{"position":[[1276,35]]},"92":{"position":[[845,35],[1862,35],[4773,35]]}},"keywords":{}}],["billinginfo?.paid",{"_index":667,"title":{},"content":{"56":{"position":[[1439,20]]},"61":{"position":[[1196,20]]},"89":{"position":[[3096,20]]},"92":{"position":[[765,20],[1719,20],[4693,20]]}},"keywords":{}}],["billingrepo",{"_index":628,"title":{},"content":{"53":{"position":[[1438,12]]},"56":{"position":[[832,12]]},"61":{"position":[[461,12]]},"62":{"position":[[949,12]]},"89":{"position":[[2306,12]]},"92":{"position":[[158,12]]}},"keywords":{}}],["billingrepomock",{"_index":1075,"title":{},"content":{"92":{"position":[[3306,15],[3548,16]]}},"keywords":{}}],["billingrepositori",{"_index":617,"title":{},"content":{"53":{"position":[[248,18],[320,18],[1048,18],[1744,18]]},"56":{"position":[[845,18]]},"61":{"position":[[91,18],[474,18]]},"62":{"position":[[559,18]]},"89":{"position":[[2319,18]]},"92":{"position":[[171,18]]}},"keywords":{}}],["billingrepositoryfaker.makebillingdetail",{"_index":1089,"title":{},"content":{"92":{"position":[[5245,43]]}},"keywords":{}}],["billingrepositoryfaker.makebillinginfo(billinginfo",{"_index":1079,"title":{},"content":{"92":{"position":[[3439,52]]}},"keywords":{}}],["boilerpl",{"_index":98,"title":{},"content":{"10":{"position":[[26,12]]}},"keywords":{}}],["boilerplate/blob/main/application/app.tsx#l44",{"_index":330,"title":{},"content":{"28":{"position":[[39,45]]}},"keywords":{}}],["boilerplate/blob/main/modules/books/features/booklist/uistore/uistore.ts#l76",{"_index":328,"title":{},"content":{"27":{"position":[[39,76]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/enums.t",{"_index":323,"title":{},"content":{"24":{"position":[[39,57]]}},"keywords":{}}],["boilerplate/blob/main/modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystore/paymentpolicystore.ts#l33",{"_index":326,"title":{},"content":{"26":{"position":[[39,126]]}},"keywords":{}}],["boilerplate/tree/main/modules/permiss",{"_index":320,"title":{},"content":{"22":{"position":[[39,41]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/polici",{"_index":321,"title":{},"content":{"23":{"position":[[39,81]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/domain/stores/permissionsstore/rul",{"_index":325,"title":{},"content":{"25":{"position":[[39,78]]}},"keywords":{}}],["boilerplate/tree/main/modules/permissions/features/routeguard",{"_index":333,"title":{},"content":{"29":{"position":[[39,62]]}},"keywords":{}}],["book",{"_index":596,"title":{},"content":{"51":{"position":[[387,6]]},"53":{"position":[[998,6]]},"56":{"position":[[1010,8]]},"61":{"position":[[639,8]]},"62":{"position":[[509,6]]},"79":{"position":[[136,5]]},"89":{"position":[[2484,8]]},"92":{"position":[[336,8]]},"95":{"position":[[791,6],[1220,6]]}},"keywords":{}}],["bookbyidqueri",{"_index":817,"title":{},"content":{"64":{"position":[[1770,15]]}},"keywords":{}}],["bookcard",{"_index":696,"title":{},"content":{"56":{"position":[[3063,8]]}},"keywords":{}}],["bookid",{"_index":677,"title":{},"content":{"56":{"position":[[1998,7],[2902,8]]},"64":{"position":[[1554,7],[2018,9]]},"75":{"position":[[102,8],[172,8]]},"94":{"position":[[457,8],[654,9]]}},"keywords":{}}],["bookspolici",{"_index":597,"title":{},"content":{"51":{"position":[[412,11]]},"61":{"position":[[3,11]]}},"keywords":{}}],["bookspolicystor",{"_index":582,"title":{},"content":{"49":{"position":[[201,17]]},"53":{"position":[[739,17],[1005,17]]},"56":{"position":[[704,16]]},"61":{"position":[[333,16]]},"62":{"position":[[516,17]]},"89":{"position":[[1099,16],[2167,16]]},"92":{"position":[[30,16],[3515,17]]}},"keywords":{}}],["booksrepo",{"_index":815,"title":{},"content":{"64":{"position":[[1675,10]]}},"keywords":{}}],["booksrepositori",{"_index":816,"title":{},"content":{"64":{"position":[[1686,15]]}},"keywords":{}}],["boolean",{"_index":863,"title":{},"content":{"70":{"position":[[74,8],[229,8]]},"92":{"position":[[2978,8]]}},"keywords":{}}],["brotli:v1.19.1",{"_index":224,"title":{},"content":{"17":{"position":[[394,14]]}},"keywords":{}}],["build",{"_index":101,"title":{"11":{"position":[[25,5]]}},"content":{"11":{"position":[[17,5]]},"17":{"position":[[258,5],[369,5]]}},"keywords":{}}],["buy",{"_index":819,"title":{},"content":{"64":{"position":[[1850,3]]}},"keywords":{}}],["cacheservic",{"_index":1069,"title":{},"content":{"92":{"position":[[3117,12]]}},"keywords":{}}],["cacheservice.createquery(['bil",{"_index":1078,"title":{},"content":{"92":{"position":[[3386,37]]}},"keywords":{}}],["cacheservice.createquery(['rol",{"_index":1074,"title":{},"content":{"92":{"position":[[3228,35]]}},"keywords":{}}],["calc",{"_index":926,"title":{},"content":{"75":{"position":[[61,5]]},"90":{"position":[[25,5]]}},"keywords":{}}],["calcacceptableag",{"_index":801,"title":{},"content":{"64":{"position":[[545,17],[1138,18]]},"86":{"position":[[175,18]]},"89":{"position":[[429,18],[668,17],[1127,17],[1260,17],[1853,18],[2114,17],[2871,18]]},"90":{"position":[[181,17]]},"93":{"position":[[236,17],[801,20]]}},"keywords":{}}],["calcaccountpay",{"_index":1018,"title":{},"content":{"86":{"position":[[208,19]]}},"keywords":{}}],["calcadminpermiss",{"_index":1042,"title":{},"content":{"90":{"position":[[84,20]]}},"keywords":{}}],["calcpay",{"_index":806,"title":{},"content":{"64":{"position":[[1021,11]]},"89":{"position":[[300,12],[1736,11]]}},"keywords":{}}],["calcreadingbook",{"_index":927,"title":{},"content":{"75":{"position":[[84,15]]},"89":{"position":[[282,15]]}},"keywords":{}}],["calcreadingonlin",{"_index":1037,"title":{},"content":{"89":{"position":[[2738,17]]}},"keywords":{}}],["canreadingbook",{"_index":923,"title":{},"content":{"74":{"position":[[476,16]]}},"keywords":{}}],["case",{"_index":747,"title":{},"content":{"58":{"position":[[149,4]]}},"keywords":{}}],["checkacceptableag",{"_index":1044,"title":{},"content":{"90":{"position":[[332,18]]}},"keywords":{}}],["checkadminrol",{"_index":1043,"title":{},"content":{"90":{"position":[[281,14]]}},"keywords":{}}],["checkreadingbook",{"_index":928,"title":{},"content":{"75":{"position":[[153,16]]}},"keywords":{}}],["children",{"_index":986,"title":{},"content":{"82":{"position":[[773,9],[840,8],[1085,9],[1196,10]]},"84":{"position":[[318,9],[367,9],[478,9],[541,9]]}},"keywords":{}}],["class",{"_index":481,"title":{},"content":{"43":{"position":[[186,5],[1215,5]]},"52":{"position":[[395,5]]},"53":{"position":[[846,5],[1814,5]]},"56":{"position":[[698,5],[1919,5]]},"61":{"position":[[327,5]]},"62":{"position":[[357,5]]},"64":{"position":[[592,5],[1475,5]]},"69":{"position":[[481,5]]},"71":{"position":[[217,5],[1593,5]]},"73":{"position":[[232,5],[1216,5]]},"89":{"position":[[1307,5],[2161,5]]},"92":{"position":[[24,5]]},"94":{"position":[[251,5]]}},"keywords":{}}],["client",{"_index":72,"title":{},"content":{"6":{"position":[[108,7]]}},"keywords":{}}],["closepayaccount",{"_index":690,"title":{},"content":{"56":{"position":[[2808,15],[3146,15]]},"64":{"position":[[2340,15]]}},"keywords":{}}],["closepaymentaccount",{"_index":1122,"title":{},"content":{"94":{"position":[[1517,19]]}},"keywords":{}}],["configservic",{"_index":3,"title":{"1":{"position":[[0,14]]}},"content":{"1":{"position":[[79,14],[107,13]]}},"keywords":{}}],["configservice.init",{"_index":294,"title":{},"content":{"19":{"position":[[337,20]]}},"keywords":{}}],["connect",{"_index":264,"title":{},"content":{"18":{"position":[[373,7]]}},"keywords":{}}],["const",{"_index":524,"title":{},"content":{"43":{"position":[[1495,5]]},"53":{"position":[[1697,5]]},"56":{"position":[[1370,5],[2880,5],[3057,5],[3107,5]]},"61":{"position":[[1127,5]]},"63":{"position":[[111,5],[143,5],[183,5]]},"64":{"position":[[1116,5],[1867,5]]},"71":{"position":[[1056,5],[1901,5],[1937,5]]},"79":{"position":[[520,5],[907,5],[942,5]]},"82":{"position":[[804,5],[1594,5]]},"84":{"position":[[425,5]]},"89":{"position":[[662,5],[1831,5],[2849,5],[3028,5]]},"90":{"position":[[78,5],[175,5],[275,5],[326,5]]},"92":{"position":[[696,5],[1600,5],[2276,5],[2919,5],[3061,5],[3111,5],[3154,5],[3300,5],[3499,5],[3737,5],[4181,5],[4624,5],[5166,5]]},"93":{"position":[[230,5],[782,5]]},"95":{"position":[[366,5],[429,5],[470,5],[727,5],[849,5],[1156,5],[1315,5]]}},"keywords":{}}],["constructor",{"_index":484,"title":{},"content":{"43":{"position":[[253,12],[1231,12]]},"52":{"position":[[462,12]]},"56":{"position":[[767,12],[1968,12]]},"61":{"position":[[396,12]]},"64":{"position":[[663,12],[1524,12]]},"69":{"position":[[548,12]]},"71":{"position":[[251,12]]},"89":{"position":[[1378,12],[2230,12]]},"92":{"position":[[93,12]]},"94":{"position":[[304,12]]}},"keywords":{}}],["constructor(billingrepo",{"_index":622,"title":{},"content":{"53":{"position":[[1023,24]]},"62":{"position":[[534,24]]}},"keywords":{}}],["constructor(priv",{"_index":634,"title":{},"content":{"53":{"position":[[1830,19]]},"71":{"position":[[1609,19]]}},"keywords":{}}],["content",{"_index":261,"title":{},"content":{"18":{"position":[[349,7]]},"82":{"position":[[1074,10]]}},"keywords":{}}],["contentstateнеобходим",{"_index":766,"title":{},"content":{"62":{"position":[[1794,22]]}},"keywords":{}}],["control",{"_index":352,"title":{},"content":{"32":{"position":[[93,8],[128,9]]}},"keywords":{}}],["copi",{"_index":216,"title":{},"content":{"17":{"position":[[285,4],[325,4],[409,4],[472,4]]}},"keywords":{}}],["createadministrationpolicystor",{"_index":619,"title":{},"content":{"53":{"position":[[594,32],[1315,32]]},"62":{"position":[[826,32]]}},"keywords":{}}],["createallowedpermiss",{"_index":1133,"title":{},"content":{"95":{"position":[[201,24],[815,26]]}},"keywords":{}}],["createbook.tsx",{"_index":944,"title":{},"content":{"79":{"position":[[113,14]]}},"keywords":{}}],["createbookpag",{"_index":949,"title":{},"content":{"79":{"position":[[526,14],[662,15]]},"82":{"position":[[1600,14],[1736,15]]}},"keywords":{}}],["createbookspolicystor",{"_index":620,"title":{},"content":{"53":{"position":[[627,23],[1394,23]]},"62":{"position":[[905,23]]}},"keywords":{}}],["createcacheservic",{"_index":1070,"title":{},"content":{"92":{"position":[[3132,21]]}},"keywords":{}}],["createdenialpermiss",{"_index":1132,"title":{},"content":{"95":{"position":[[95,22],[226,22],[1244,23]]}},"keywords":{}}],["createpaymentpolicystor",{"_index":621,"title":{},"content":{"53":{"position":[[651,25]]}},"keywords":{}}],["createpermiss",{"_index":862,"title":{},"content":{"70":{"position":[[1,16]]}},"keywords":{}}],["createpolicymanagerstor",{"_index":618,"title":{},"content":{"53":{"position":[[530,24],[1265,27]]},"62":{"position":[[254,24],[776,27]]},"92":{"position":[[3083,27]]}},"keywords":{}}],["createrul",{"_index":1023,"title":{},"content":{"88":{"position":[[27,10]]},"89":{"position":[[614,10]]}},"keywords":{}}],["createrule((allow",{"_index":1028,"title":{},"content":{"89":{"position":[[745,18]]},"93":{"position":[[313,18]]}},"keywords":{}}],["createuistor",{"_index":691,"title":{},"content":{"56":{"position":[[2886,13]]}},"keywords":{}}],["createuistore(id",{"_index":699,"title":{},"content":{"56":{"position":[[3185,19]]}},"keywords":{}}],["creationbookscreen",{"_index":947,"title":{},"content":{"79":{"position":[[410,18]]},"82":{"position":[[1484,18]]}},"keywords":{}}],["csr",{"_index":52,"title":{"5":{"position":[[0,4]]},"9":{"position":[[0,3]]}},"content":{"6":{"position":[[104,3]]},"13":{"position":[[862,3]]}},"keywords":{}}],["currentcount",{"_index":1091,"title":{},"content":{"92":{"position":[[5298,13]]}},"keywords":{}}],["data",{"_index":732,"title":{},"content":{"57":{"position":[[769,6]]}},"keywords":{}}],["date",{"_index":1033,"title":{},"content":{"89":{"position":[[974,7]]},"93":{"position":[[552,8]]}},"keywords":{}}],["date(userbirthday",{"_index":1032,"title":{},"content":{"89":{"position":[[950,19]]},"93":{"position":[[528,19]]}},"keywords":{}}],["default",{"_index":953,"title":{},"content":{"79":{"position":[[654,7],[1184,7]]},"82":{"position":[[1728,7]]}},"keywords":{}}],["deletingorgan",{"_index":575,"title":{},"content":{"47":{"position":[[403,21],[638,21]]}},"keywords":{}}],["deni",{"_index":506,"title":{},"content":{"43":{"position":[[769,5]]},"56":{"position":[[1287,5]]},"61":{"position":[[1044,5]]},"64":{"position":[[1102,5]]},"69":{"position":[[1026,5]]},"71":{"position":[[722,5]]},"73":{"position":[[358,5],[576,5],[789,5],[1342,5]]},"89":{"position":[[764,5],[1817,5],[2835,5]]},"92":{"position":[[613,5],[1392,4],[1479,5],[4421,4],[4541,5],[4995,4]]},"93":{"position":[[190,4],[332,5]]}},"keywords":{}}],["denialmissingdatapermiss",{"_index":831,"title":{},"content":{"65":{"position":[[151,27]]}},"keywords":{}}],["denialswitch",{"_index":988,"title":{},"content":{"82":{"position":[[963,15],[1241,12]]},"84":{"position":[[271,13],[464,13]]}},"keywords":{}}],["denialswitch[permission.reason",{"_index":1006,"title":{},"content":{"84":{"position":[[556,33],[599,32]]}},"keywords":{}}],["deny(agepermission.reason",{"_index":812,"title":{},"content":{"64":{"position":[[1265,27]]},"89":{"position":[[1980,27],[2998,27]]}},"keywords":{}}],["deny(permissiondenialreason.exceedshelfcount",{"_index":671,"title":{},"content":{"56":{"position":[[1608,46]]},"61":{"position":[[1365,46]]},"92":{"position":[[934,46],[1951,46],[4862,46]]}},"keywords":{}}],["deny(permissiondenialreason.missingdata",{"_index":1029,"title":{},"content":{"89":{"position":[[807,41]]},"93":{"position":[[375,41]]}},"keywords":{}}],["deny(permissiondenialreason.missinguserag",{"_index":1030,"title":{},"content":{"89":{"position":[[879,44]]},"93":{"position":[[447,44]]}},"keywords":{}}],["deny(permissiondenialreason.noadmin",{"_index":517,"title":{},"content":{"43":{"position":[[1108,37]]},"69":{"position":[[1171,37]]},"71":{"position":[[805,37]]},"73":{"position":[[441,37],[659,37],[872,37],[1425,37]]}},"keywords":{}}],["deny(permissiondenialreason.nopayaccount",{"_index":668,"title":{},"content":{"56":{"position":[[1469,42]]},"61":{"position":[[1226,42]]},"89":{"position":[[3126,42]]},"92":{"position":[[795,42],[1749,42],[4723,42]]}},"keywords":{}}],["deny(permissiondenialreason.notforyourag",{"_index":1034,"title":{},"content":{"89":{"position":[[1011,43]]},"93":{"position":[[591,43]]}},"keywords":{}}],["deny(permissiondenialreason.twofa",{"_index":514,"title":{},"content":{"43":{"position":[[1001,35]]}},"keywords":{}}],["describ",{"_index":1051,"title":{},"content":{"92":{"position":[[1127,9]]}},"keywords":{}}],["describe('administrationpolicystor",{"_index":1052,"title":{},"content":{"92":{"position":[[1138,37]]}},"keywords":{}}],["describe('bookspolicystor",{"_index":1059,"title":{},"content":{"92":{"position":[[2140,28],[2879,28]]}},"keywords":{}}],["describe('calcacceptableag",{"_index":1102,"title":{},"content":{"93":{"position":[[652,29]]}},"keywords":{}}],["describe('goodsliststor",{"_index":1123,"title":{},"content":{"94":{"position":[[1617,26]]},"95":{"position":[[279,26]]}},"keywords":{}}],["describe('добавлен",{"_index":1053,"title":{},"content":{"92":{"position":[[1187,20],[2180,20],[3641,20]]},"94":{"position":[[1655,20]]},"95":{"position":[[317,20]]}},"keywords":{}}],["describe('доступ",{"_index":1103,"title":{},"content":{"93":{"position":[[693,17]]}},"keywords":{}}],["dev",{"_index":161,"title":{"14":{"position":[[0,3]]}},"content":{"13":{"position":[[372,3],[582,3]]},"15":{"position":[[88,3]]}},"keywords":{}}],["doc",{"_index":571,"title":{},"content":{"47":{"position":[[246,4],[462,4],[689,4],[718,4]]}},"keywords":{}}],["docact",{"_index":404,"title":{},"content":{"33":{"position":[[638,11]]},"34":{"position":[[45,10],[219,10],[447,11]]},"47":{"position":[[268,11],[625,10]]}},"keywords":{}}],["docker",{"_index":130,"title":{},"content":{"11":{"position":[[488,6],[693,6]]},"12":{"position":[[105,6]]},"13":{"position":[[396,6],[926,6]]},"17":{"position":[[26,6]]}},"keywords":{}}],["dockerfil",{"_index":209,"title":{},"content":{"17":{"position":[[1,11],[152,10]]}},"keywords":{}}],["domain",{"_index":984,"title":{},"content":{"82":{"position":[[682,18]]},"84":{"position":[[80,15],[135,15]]}},"keywords":{}}],["dx",{"_index":457,"title":{},"content":{"38":{"position":[[122,2]]},"53":{"position":[[2204,2]]}},"keywords":{}}],["entrypoint",{"_index":235,"title":{},"content":{"17":{"position":[[611,10]]}},"keywords":{}}],["enum",{"_index":604,"title":{"57":{"position":[[29,5]]}},"content":{"52":{"position":[[223,20]]},"57":{"position":[[124,4],[291,4],[580,4],[952,4]]},"69":{"position":[[309,20]]}},"keywords":{}}],["enums.t",{"_index":586,"title":{},"content":{"49":{"position":[[333,8]]},"86":{"position":[[308,8]]}},"keywords":{}}],["env",{"_index":1,"title":{"0":{"position":[[9,3]]},"3":{"position":[[45,3]]},"9":{"position":[[26,3]]},"11":{"position":[[19,3]]},"12":{"position":[[30,4]]},"19":{"position":[[14,3]]},"20":{"position":[[20,3]]}},"content":{"1":{"position":[[69,3]]},"2":{"position":[[104,4],[156,3]]},"4":{"position":[[10,3],[116,3],[246,3]]},"6":{"position":[[38,3],[98,3]]},"11":{"position":[[11,3],[138,3],[345,3],[670,3]]},"12":{"position":[[30,3],[170,3]]},"13":{"position":[[619,3],[786,3]]},"17":{"position":[[135,4],[607,3],[837,3]]},"18":{"position":[[18,3]]},"19":{"position":[[254,3]]},"20":{"position":[[8,3],[33,3],[168,3],[236,3]]}},"keywords":{}}],["env.dev",{"_index":199,"title":{},"content":{"15":{"position":[[180,9]]}},"keywords":{}}],["env.loc",{"_index":198,"title":{},"content":{"15":{"position":[[164,10]]}},"keywords":{}}],["envprefix",{"_index":61,"title":{},"content":{"5":{"position":[[184,9]]}},"keywords":{}}],["envsubst",{"_index":270,"title":{},"content":{"18":{"position":[[539,8],[733,8]]}},"keywords":{}}],["error",{"_index":728,"title":{},"content":{"57":{"position":[[681,7]]}},"keywords":{}}],["errorlist",{"_index":785,"title":{},"content":{"63":{"position":[[544,10]]}},"keywords":{}}],["errorst",{"_index":784,"title":{},"content":{"63":{"position":[[530,13]]}},"keywords":{}}],["etc/nginx/nginx.conf",{"_index":280,"title":{},"content":{"18":{"position":[[812,21]]}},"keywords":{}}],["etc/nginx/nginx.conf.templ",{"_index":226,"title":{},"content":{"17":{"position":[[441,30]]},"18":{"position":[[776,30]]}},"keywords":{}}],["exampl",{"_index":864,"title":{},"content":{"70":{"position":[[140,8]]}},"keywords":{}}],["example/data",{"_index":602,"title":{},"content":{"52":{"position":[[167,16]]},"53":{"position":[[289,16],[361,16]]},"69":{"position":[[253,16]]}},"keywords":{}}],["example/modules/permiss",{"_index":674,"title":{},"content":{"56":{"position":[[1880,31]]},"71":{"position":[[1017,31]]},"79":{"position":[[488,31],[875,31]]},"82":{"position":[[1562,31]]}},"keywords":{}}],["example/screen",{"_index":948,"title":{},"content":{"79":{"position":[[436,19],[766,19]]},"82":{"position":[[1510,19]]}},"keywords":{}}],["example/shar",{"_index":958,"title":{},"content":{"79":{"position":[[818,18]]},"82":{"position":[[606,18]]},"84":{"position":[[29,18]]}},"keywords":{}}],["exec",{"_index":231,"title":{},"content":{"17":{"position":[[563,4]]}},"keywords":{}}],["expect(notifymock.info).tobecalledwith('книг",{"_index":1141,"title":{},"content":{"95":{"position":[[901,45]]}},"keywords":{}}],["expect(permission.isallowed).tobefalsi",{"_index":1105,"title":{},"content":{"93":{"position":[[822,41]]}},"keywords":{}}],["expect(permission.reason).tobe(permissiondenialreason.missingdata",{"_index":1106,"title":{},"content":{"93":{"position":[[864,67]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobefalsi",{"_index":1084,"title":{},"content":{"92":{"position":[[4261,48]]}},"keywords":{}}],["expect(sut.addingtoshelf.isallowed).tobetruthi",{"_index":1064,"title":{},"content":{"92":{"position":[[2324,49],[3785,49],[5345,49]]}},"keywords":{}}],["expect(sut.addingtoshelf.reason).tob",{"_index":1085,"title":{},"content":{"92":{"position":[[4310,38]]}},"keywords":{}}],["expect(sut.isopenaccountpayment).tobetruthi",{"_index":1142,"title":{},"content":{"95":{"position":[[1360,46]]}},"keywords":{}}],["export",{"_index":276,"title":{},"content":{"18":{"position":[[620,6]]},"43":{"position":[[179,6],[1208,6]]},"52":{"position":[[388,6]]},"53":{"position":[[839,6],[1690,6],[1807,6]]},"56":{"position":[[691,6],[1912,6],[2873,6],[3050,6]]},"57":{"position":[[284,6],[573,6],[945,6]]},"61":{"position":[[320,6]]},"62":{"position":[[350,6]]},"63":{"position":[[104,6]]},"64":{"position":[[585,6],[1468,6]]},"69":{"position":[[474,6]]},"71":{"position":[[1049,6],[1586,6],[1894,6]]},"79":{"position":[[647,6],[1177,6]]},"82":{"position":[[797,6],[1721,6]]},"84":{"position":[[418,6]]},"89":{"position":[[655,6],[1300,6],[2154,6]]},"92":{"position":[[17,6]]},"93":{"position":[[223,6]]},"94":{"position":[[244,6]]}},"keywords":{}}],["extend",{"_index":1131,"title":{},"content":{"95":{"position":[[84,8],[181,10]]}},"keywords":{}}],["extern",{"_index":673,"title":{},"content":{"56":{"position":[[1790,8]]}},"keywords":{}}],["factor",{"_index":475,"title":{"42":{"position":[[9,6]]}},"content":{},"keywords":{}}],["fals",{"_index":676,"title":{},"content":{"56":{"position":[[1961,6],[2861,6]]},"64":{"position":[[1517,6],[2393,6]]},"65":{"position":[[194,6]]},"92":{"position":[[4220,6],[4248,5],[5205,6]]},"94":{"position":[[297,6],[1578,6]]}},"keywords":{}}],["featur",{"_index":470,"title":{"40":{"position":[[0,7]]},"41":{"position":[[31,7]]}},"content":{"41":{"position":[[32,7],[73,7],[145,7]]},"43":{"position":[[873,8]]},"65":{"position":[[41,9]]},"67":{"position":[[284,7]]},"68":{"position":[[589,7]]},"71":{"position":[[855,8]]},"73":{"position":[[1490,8]]},"77":{"position":[[112,9]]},"79":{"position":[[204,9]]}},"keywords":{}}],["featuretoggl",{"_index":465,"title":{},"content":{"38":{"position":[[353,13]]}},"keywords":{}}],["fholzer/nginx",{"_index":223,"title":{},"content":{"17":{"position":[[380,13]]}},"keywords":{}}],["from=build",{"_index":227,"title":{},"content":{"17":{"position":[[479,10]]}},"keywords":{}}],["frontend",{"_index":79,"title":{},"content":{"7":{"position":[[108,8]]}},"keywords":{}}],["frontend'е",{"_index":354,"title":{},"content":{"32":{"position":[[142,10]]}},"keywords":{}}],["frontend.shar",{"_index":91,"title":{},"content":{"8":{"position":[[97,16]]}},"keywords":{}}],["generateenv.dev.sh",{"_index":193,"title":{"15":{"position":[[22,18]]}},"content":{"15":{"position":[[8,18]]}},"keywords":{}}],["getbillinginfoqueri",{"_index":1077,"title":{},"content":{"92":{"position":[[3356,20]]}},"keywords":{}}],["getdateyeardiff(new",{"_index":1031,"title":{},"content":{"89":{"position":[[929,20]]}},"keywords":{}}],["getrolesqueri",{"_index":1073,"title":{},"content":{"92":{"position":[[3204,14]]}},"keywords":{}}],["github",{"_index":93,"title":{},"content":{"8":{"position":[[131,7]]}},"keywords":{}}],["gitignor",{"_index":155,"title":{},"content":{"13":{"position":[[160,11],[556,12],[669,11]]}},"keywords":{}}],["global.d.t",{"_index":285,"title":{},"content":{"19":{"position":[[77,12]]}},"keywords":{}}],["gt",{"_index":166,"title":{},"content":{"13":{"position":[[460,4]]},"18":{"position":[[807,4]]},"43":{"position":[[568,5],[775,5],[1487,5]]},"52":{"position":[[929,5]]},"53":{"position":[[1547,5]]},"56":{"position":[[1041,5],[1293,5],[1555,5],[2181,5],[2760,5],[2829,5],[2919,5],[3099,5],[3179,5],[3254,5],[3419,5]]},"61":{"position":[[754,5],[1050,5],[1312,5]]},"62":{"position":[[1058,5]]},"63":{"position":[[135,5],[260,5],[431,5],[624,4]]},"64":{"position":[[901,5],[1059,5],[1108,5],[1859,5],[2292,5],[2361,5]]},"69":{"position":[[825,5],[1032,5]]},"70":{"position":[[223,5]]},"71":{"position":[[514,5],[728,5],[1084,5],[1315,5],[1929,5]]},"73":{"position":[[364,5],[582,5],[795,5],[1348,5]]},"75":{"position":[[119,5],[189,5]]},"79":{"position":[[546,5],[610,5],[934,5],[1048,6],[1134,5]]},"82":{"position":[[859,5],[1167,5],[1179,5],[1191,4],[1620,5],[1684,5]]},"84":{"position":[[498,5],[768,6],[925,6],[987,6]]},"89":{"position":[[739,5],[770,5],[1616,5],[1774,5],[1823,5],[2515,5],[2783,5],[2841,5]]},"90":{"position":[[122,5],[249,5],[313,5],[401,5]]},"92":{"position":[[367,5],[619,5],[881,5],[1179,5],[1228,5],[1485,5],[1898,5],[2172,5],[2221,5],[2268,5],[2429,5],[2504,5],[2593,5],[2703,5],[2911,5],[3053,5],[3222,5],[3273,5],[3380,5],[3433,5],[3682,5],[3729,5],[4173,5],[4547,5],[4809,5],[5158,5]]},"93":{"position":[[307,5],[338,5],[685,5],[720,5],[774,5],[992,5],[1067,5],[1199,5]]},"94":{"position":[[474,5],[1465,5],[1542,5],[1647,5],[1696,5],[1786,5],[1888,5],[1996,5],[2115,5]]},"95":{"position":[[309,5],[358,5],[421,5],[664,5],[1067,5]]}},"keywords":{}}],["guard",{"_index":332,"title":{"29":{"position":[[6,7]]},"30":{"position":[[20,7]]},"76":{"position":[[6,7]]},"78":{"position":[[0,5]]},"81":{"position":[[15,6]]}},"content":{"77":{"position":[[11,6]]},"78":{"position":[[7,5],[109,5]]},"80":{"position":[[21,5],[131,6]]},"81":{"position":[[69,6],[182,5],[313,6]]},"82":{"position":[[416,6]]}},"keywords":{}}],["hasreason",{"_index":866,"title":{},"content":{"70":{"position":[[195,10]]}},"keywords":{}}],["header",{"_index":991,"title":{},"content":{"82":{"position":[[1030,9]]}},"keywords":{}}],["html",{"_index":141,"title":{},"content":{"11":{"position":[[676,4]]},"12":{"position":[[165,4]]},"13":{"position":[[73,5]]}},"keywords":{}}],["http",{"_index":257,"title":{},"content":{"18":{"position":[[287,4]]}},"keywords":{}}],["https://github.com/kaluga",{"_index":318,"title":{},"content":{"22":{"position":[[1,25]]},"23":{"position":[[1,25]]},"24":{"position":[[1,25]]},"25":{"position":[[1,25]]},"26":{"position":[[1,25]]},"27":{"position":[[1,25]]},"28":{"position":[[1,25]]},"29":{"position":[[1,25]]}},"keywords":{}}],["id",{"_index":695,"title":{},"content":{"56":{"position":[[3035,3],[3086,2]]},"79":{"position":[[950,2],[979,5]]},"95":{"position":[[947,2]]}},"keywords":{}}],["id={id",{"_index":966,"title":{},"content":{"79":{"position":[[1126,7]]}},"keywords":{}}],["id={id}>",{"_index":964,"title":{},"content":{"79":{"position":[[1092,11]]}},"keywords":{}}],["imag",{"_index":131,"title":{},"content":{"11":{"position":[[495,6]]}},"keywords":{}}],["import",{"_index":598,"title":{},"content":{"52":{"position":[[88,6],[131,6],[184,6],[322,6]]},"53":{"position":[[196,6],[239,6],[306,6],[458,6],[521,6],[585,6],[698,6]]},"56":{"position":[[625,6],[1804,6]]},"57":{"position":[[887,6]]},"61":{"position":[[254,6]]},"62":{"position":[[182,6],[245,6]]},"64":{"position":[[536,6]]},"69":{"position":[[174,6],[217,6],[270,6],[408,6]]},"71":{"position":[[940,6],[984,6]]},"79":{"position":[[401,6],[456,6],[716,6],[786,6],[837,6]]},"82":{"position":[[482,6],[522,6],[566,6],[625,6],[701,6],[1475,6],[1530,6]]},"84":{"position":[[1,6],[48,6],[96,6]]},"89":{"position":[[605,6],[1251,6],[2105,6]]},"95":{"position":[[143,6],[192,6]]}},"keywords":{}}],["import.meta.env",{"_index":111,"title":{},"content":{"11":{"position":[[144,15]]}},"keywords":{}}],["index.html",{"_index":144,"title":{"12":{"position":[[10,10]]},"13":{"position":[[10,10]]},"15":{"position":[[10,11]]},"17":{"position":[[10,11]]},"20":{"position":[[26,11]]}},"content":{"12":{"position":[[136,10]]},"13":{"position":[[113,11],[126,10],[543,10],[636,11]]},"15":{"position":[[251,10],[414,10]]},"17":{"position":[[98,10],[879,10],[944,10]]}},"keywords":{}}],["index.t",{"_index":584,"title":{},"content":{"49":{"position":[[267,8],[316,8],[350,8]]},"77":{"position":[[222,8],[241,8],[258,8]]},"79":{"position":[[314,8],[333,8],[350,8]]},"86":{"position":[[242,8],[291,8],[325,8]]}},"keywords":{}}],["index.template.html",{"_index":147,"title":{"13":{"position":[[24,20]]}},"content":{"13":{"position":[[40,19],[184,20],[213,19],[234,19],[514,19]]},"15":{"position":[[286,20]]}},"keywords":{}}],["index.template.htmlзаменя",{"_index":242,"title":{},"content":{"17":{"position":[[914,27]]}},"keywords":{}}],["info",{"_index":1088,"title":{},"content":{"92":{"position":[[5239,5]]}},"keywords":{}}],["inject",{"_index":140,"title":{"12":{"position":[[23,6]]},"20":{"position":[[13,6]]}},"content":{"11":{"position":[[663,6]]},"13":{"position":[[612,6],[779,6]]},"20":{"position":[[1,6]]}},"keywords":{}}],["interfac",{"_index":286,"title":{},"content":{"19":{"position":[[91,9]]}},"keywords":{}}],["intern",{"_index":727,"title":{},"content":{"57":{"position":[[671,9]]}},"keywords":{}}],["internalerror",{"_index":726,"title":{},"content":{"57":{"position":[[655,13],[1032,13]]}},"keywords":{}}],["intro",{"_index":63,"title":{"6":{"position":[[0,5]]},"7":{"position":[[0,5]]},"35":{"position":[[0,5]]}},"content":{"6":{"position":[[0,5]]},"7":{"position":[[0,5]]}},"keywords":{}}],["invalid",{"_index":922,"title":{},"content":{"74":{"position":[[456,7]]},"75":{"position":[[137,7]]},"90":{"position":[[266,7]]}},"keywords":{}}],["isaddtoshelf",{"_index":924,"title":{},"content":{"74":{"position":[[512,14]]}},"keywords":{}}],["isadmin",{"_index":1063,"title":{},"content":{"92":{"position":[[2306,8],[2942,8],[2969,8],[3282,8],[3767,8],[4211,8],[5196,8]]}},"keywords":{}}],["isallow",{"_index":832,"title":{},"content":{"65":{"position":[[183,10]]},"70":{"position":[[63,10]]}},"keywords":{}}],["isallowedbookcr",{"_index":635,"title":{},"content":{"53":{"position":[[1955,23]]},"71":{"position":[[1734,23],[1946,21],[2043,22]]}},"keywords":{}}],["iserror={permissionsstatus.iserror",{"_index":782,"title":{},"content":{"63":{"position":[[454,35]]}},"keywords":{}}],["isloading={permissionsstatus.isload",{"_index":783,"title":{},"content":{"63":{"position":[[490,39]]}},"keywords":{}}],["isopen={isopenpayaccount",{"_index":708,"title":{},"content":{"56":{"position":[[3367,25]]}},"keywords":{}}],["isopenaccountpay",{"_index":1111,"title":{},"content":{"94":{"position":[[274,20]]}},"keywords":{}}],["isopenpayaccount",{"_index":675,"title":{},"content":{"56":{"position":[[1942,16],[3128,17]]},"64":{"position":[[1498,16]]}},"keywords":{}}],["issu",{"_index":82,"title":{"8":{"position":[[0,6]]}},"content":{"8":{"position":[[0,6]]}},"keywords":{}}],["it('доступ",{"_index":1107,"title":{},"content":{"93":{"position":[[1082,10]]}},"keywords":{}}],["it('доступн",{"_index":1060,"title":{},"content":{"92":{"position":[[2229,12],[2604,13],[3690,12],[5059,13]]}},"keywords":{}}],["it('есл",{"_index":1104,"title":{},"content":{"93":{"position":[[728,8],[936,8],[1003,8]]}},"keywords":{}}],["it('недоступн",{"_index":1065,"title":{},"content":{"92":{"position":[[2378,15],[2440,15],[2515,15],[4122,15]]}},"keywords":{}}],["it('открыва",{"_index":1125,"title":{},"content":{"94":{"position":[[1797,13]]},"95":{"position":[[976,13]]}},"keywords":{}}],["it('показыва",{"_index":1124,"title":{},"content":{"94":{"position":[[1704,14],[1899,14],[2007,14]]},"95":{"position":[[582,14]]}},"keywords":{}}],["js",{"_index":117,"title":{},"content":{"11":{"position":[[244,2],[307,2]]}},"keywords":{}}],["jsdoc",{"_index":742,"title":{},"content":{"58":{"position":[[60,5]]}},"keywords":{}}],["kebab",{"_index":746,"title":{},"content":{"58":{"position":[[143,5]]}},"keywords":{}}],["label",{"_index":126,"title":{},"content":{"11":{"position":[[429,6]]}},"keywords":{}}],["listen",{"_index":258,"title":{},"content":{"18":{"position":[[307,6],[318,6]]}},"keywords":{}}],["lite",{"_index":877,"title":{},"content":{"71":{"position":[[977,6]]},"82":{"position":[[559,6]]}},"keywords":{}}],["lock.json",{"_index":219,"title":{},"content":{"17":{"position":[[311,10]]}},"keywords":{}}],["lt",{"_index":160,"title":{},"content":{"13":{"position":[[352,5]]},"18":{"position":[[771,4]]},"89":{"position":[[982,4]]},"93":{"position":[[561,4]]}},"keywords":{}}],["lt;>",{"_index":700,"title":{},"content":{"56":{"position":[[3214,8]]}},"keywords":{}}],["lt;/>",{"_index":710,"title":{},"content":{"56":{"position":[[3425,9]]}},"keywords":{}}],["lt;/adminrouteguard>",{"_index":952,"title":{},"content":{"79":{"position":[[616,24]]},"82":{"position":[[1690,24]]}},"keywords":{}}],["lt;/container>",{"_index":706,"title":{},"content":{"56":{"position":[[3328,18]]}},"keywords":{}}],["lt;/contentstate>",{"_index":789,"title":{},"content":{"63":{"position":[[681,21]]}},"keywords":{}}],["lt;/permissionguard>",{"_index":997,"title":{},"content":{"82":{"position":[[1207,24]]}},"keywords":{}}],["lt;/readingbookrouteguard>",{"_index":967,"title":{},"content":{"79":{"position":[[1140,30]]}},"keywords":{}}],["lt;/routerlink>",{"_index":883,"title":{},"content":{"71":{"position":[[1293,19],[2157,19]]}},"keywords":{}}],["lt;/script>",{"_index":168,"title":{},"content":{"13":{"position":[[484,15]]}},"keywords":{}}],["lt;/sidebar>",{"_index":884,"title":{},"content":{"71":{"position":[[1321,16],[2201,16]]}},"keywords":{}}],["lt;/sidebaritem>",{"_index":895,"title":{},"content":{"71":{"position":[[2180,20]]}},"keywords":{}}],["lt;/themeprovider>",{"_index":790,"title":{},"content":{"63":{"position":[[703,22]]}},"keywords":{}}],["lt;adminrouteguard>",{"_index":950,"title":{},"content":{"79":{"position":[[563,23]]},"82":{"position":[[1637,23]]}},"keywords":{}}],["lt;bookinfo",{"_index":702,"title":{},"content":{"56":{"position":[[3241,12]]}},"keywords":{}}],["lt;button",{"_index":703,"title":{},"content":{"56":{"position":[[3260,10]]}},"keywords":{}}],["lt;container>",{"_index":701,"title":{},"content":{"56":{"position":[[3223,17]]}},"keywords":{}}],["lt;contentst",{"_index":781,"title":{},"content":{"63":{"position":[[437,16]]}},"keywords":{}}],["lt;creationbookscreen",{"_index":951,"title":{},"content":{"79":{"position":[[587,22]]},"82":{"position":[[1661,22]]}},"keywords":{}}],["lt;head>",{"_index":159,"title":{},"content":{"13":{"position":[[322,13]]}},"keywords":{}}],["lt;mainlayout>{renderroutes}</mainlayout>",{"_index":788,"title":{},"content":{"63":{"position":[[629,51]]}},"keywords":{}}],["lt;notfoundscreen",{"_index":960,"title":{},"content":{"79":{"position":[[994,18]]}},"keywords":{}}],["lt;notificationcontain",{"_index":780,"title":{},"content":{"63":{"position":[[405,25]]}},"keywords":{}}],["lt;pagelayout",{"_index":990,"title":{},"content":{"82":{"position":[[1015,14]]}},"keywords":{}}],["lt;payaccountmod",{"_index":707,"title":{},"content":{"56":{"position":[[3347,19]]}},"keywords":{}}],["lt;permissionguard",{"_index":987,"title":{},"content":{"82":{"position":[[876,19]]}},"keywords":{}}],["lt;permissionsgateway",{"_index":879,"title":{},"content":{"71":{"position":[[1117,22]]}},"keywords":{}}],["lt;placehold",{"_index":994,"title":{},"content":{"82":{"position":[[1097,15]]},"84":{"position":[[706,15],[851,15],[941,15]]}},"keywords":{}}],["lt;readingbookrouteguard",{"_index":963,"title":{},"content":{"79":{"position":[[1066,25]]}},"keywords":{}}],["lt;readingbookscreen",{"_index":965,"title":{},"content":{"79":{"position":[[1104,21]]}},"keywords":{}}],["lt;routerlink",{"_index":881,"title":{},"content":{"71":{"position":[[1215,14],[2079,14]]}},"keywords":{}}],["lt;script>",{"_index":158,"title":{},"content":{"13":{"position":[[305,14],[337,14]]}},"keywords":{}}],["lt;sidebar>",{"_index":878,"title":{},"content":{"71":{"position":[[1101,15],[2007,15]]}},"keywords":{}}],["lt;sidebaritem>",{"_index":893,"title":{},"content":{"71":{"position":[[2023,19]]}},"keywords":{}}],["lt;themeprovid",{"_index":778,"title":{},"content":{"63":{"position":[[369,17]]}},"keywords":{}}],["makeautoobserv",{"_index":599,"title":{},"content":{"52":{"position":[[97,18]]},"53":{"position":[[205,18]]},"69":{"position":[[183,18]]}},"keywords":{}}],["makeautoobservable(thi",{"_index":491,"title":{},"content":{"43":{"position":[[403,24],[1407,24]]},"52":{"position":[[574,24]]},"53":{"position":[[1095,24],[1892,24]]},"56":{"position":[[911,24],[2106,24]]},"61":{"position":[[540,24]]},"62":{"position":[[606,24]]},"64":{"position":[[769,24],[1706,24]]},"69":{"position":[[660,24]]},"71":{"position":[[363,24],[1671,24]]},"89":{"position":[[1484,24],[2385,24]]},"92":{"position":[[237,24]]},"94":{"position":[[409,25]]}},"keywords":{}}],["math.abs(getdateyeardiff(new",{"_index":1101,"title":{},"content":{"93":{"position":[[499,28]]}},"keywords":{}}],["miss",{"_index":731,"title":{},"content":{"57":{"position":[[760,8]]}},"keywords":{}}],["missingdata",{"_index":730,"title":{},"content":{"57":{"position":[[746,11],[1139,11]]}},"keywords":{}}],["mobx",{"_index":600,"title":{},"content":{"52":{"position":[[123,7]]},"53":{"position":[[231,7]]},"69":{"position":[[209,7]]},"71":{"position":[[965,5]]},"82":{"position":[[547,5]]}},"keywords":{}}],["mock",{"_index":1130,"title":{},"content":{"95":{"position":[[79,4],[176,4]]}},"keywords":{}}],["mock<billingrepository>",{"_index":1076,"title":{},"content":{"92":{"position":[[3324,31]]}},"keywords":{}}],["mock<notify>",{"_index":1136,"title":{},"content":{"95":{"position":[[448,21]]}},"keywords":{}}],["mock<userrepository>",{"_index":1072,"title":{},"content":{"92":{"position":[[3175,28]]}},"keywords":{}}],["mockdeep",{"_index":1127,"title":{},"content":{"95":{"position":[[49,8],[152,8]]}},"keywords":{}}],["mockdeep<permissionsstore>",{"_index":1139,"title":{},"content":{"95":{"position":[[756,34],[1185,34]]}},"keywords":{}}],["mode",{"_index":192,"title":{"14":{"position":[[4,5]]},"16":{"position":[[5,5]]}},"content":{},"keywords":{}}],["modul",{"_index":317,"title":{"22":{"position":[[12,7]]},"44":{"position":[[19,6]]}},"content":{"49":{"position":[[52,8]]},"51":{"position":[[1,7],[192,8]]},"77":{"position":[[76,8]]},"79":{"position":[[168,8]]},"86":{"position":[[48,8]]},"94":{"position":[[143,7]]}},"keywords":{}}],["modules/books/features/bookcard/bookcard.tsx",{"_index":693,"title":{},"content":{"56":{"position":[[2974,44]]}},"keywords":{}}],["modules/books/features/bookcard/uistor",{"_index":672,"title":{},"content":{"56":{"position":[[1676,39]]},"64":{"position":[[1427,39]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/sidebar.tsx",{"_index":891,"title":{},"content":{"71":{"position":[[1838,54]]}},"keywords":{}}],["modules/layout/features/mainlayout/sidebar/uistor",{"_index":518,"title":{},"content":{"43":{"position":[[1156,50]]},"71":{"position":[[1534,50]]}},"keywords":{}}],["modules/permissions/domain/enums.t",{"_index":716,"title":{},"content":{"57":{"position":[[246,36]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/administrationpolicystor",{"_index":480,"title":{},"content":{"43":{"position":[[92,85]]},"52":{"position":[[1,85]]},"69":{"position":[[87,85]]},"71":{"position":[[130,85]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolici",{"_index":659,"title":{},"content":{"56":{"position":[[474,71]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/bookspolicystor",{"_index":1036,"title":{},"content":{"89":{"position":[[2027,76]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/policies/paymentpolicystor",{"_index":1035,"title":{},"content":{"89":{"position":[[1171,78]]}},"keywords":{}}],["modules/permissions/domain/stores/permissionsstore/rules/calcacceptableag",{"_index":1026,"title":{},"content":{"89":{"position":[[449,74]]}},"keywords":{}}],["modules/permissions/features/routeguard",{"_index":929,"title":{},"content":{"77":{"position":[[29,41]]},"81":{"position":[[3,40]]}},"keywords":{}}],["modules/permissions/features/routeguards/adminrouteguard",{"_index":980,"title":{},"content":{"82":{"position":[[424,56]]}},"keywords":{}}],["monitoringdsn",{"_index":297,"title":{},"content":{"19":{"position":[[397,14]]}},"keywords":{}}],["monitoringreleas",{"_index":301,"title":{},"content":{"19":{"position":[[497,18]]}},"keywords":{}}],["monitoringstand",{"_index":299,"title":{},"content":{"19":{"position":[[446,16]]}},"keywords":{}}],["name",{"_index":496,"title":{},"content":{"43":{"position":[[501,5]]},"52":{"position":[[772,5]]},"56":{"position":[[1004,5]]},"61":{"position":[[633,5]]},"64":{"position":[[862,5]]},"69":{"position":[[758,5]]},"71":{"position":[[447,5]]},"89":{"position":[[1577,5],[2478,5]]},"92":{"position":[[330,5]]}},"keywords":{}}],["new",{"_index":633,"title":{},"content":{"53":{"position":[[1722,3]]},"56":{"position":[[2925,3]]},"89":{"position":[[970,3]]},"92":{"position":[[3511,3]]},"93":{"position":[[548,3]]},"95":{"position":[[482,3]]}},"keywords":{}}],["next_priv",{"_index":50,"title":{},"content":{"4":{"position":[[285,13]]}},"keywords":{}}],["next_publ",{"_index":48,"title":{},"content":{"4":{"position":[[271,11]]}},"keywords":{}}],["nextj",{"_index":14,"title":{"2":{"position":[[0,7]]}},"content":{"2":{"position":[[0,7],[47,7]]},"4":{"position":[[220,6]]}},"keywords":{}}],["nginx",{"_index":94,"title":{"9":{"position":[[6,6]]},"18":{"position":[[25,6]]}},"content":{"13":{"position":[[890,6]]},"17":{"position":[[1080,5],[1141,5]]},"18":{"position":[[988,5]]}},"keywords":{}}],["nginx.conf",{"_index":248,"title":{},"content":{"18":{"position":[[49,11],[77,10],[722,10],[935,11]]}},"keywords":{}}],["nginx.conf.templ",{"_index":251,"title":{},"content":{"18":{"position":[[144,20],[674,19],[875,19]]}},"keywords":{}}],["nginx.conf.замен",{"_index":253,"title":{},"content":{"18":{"position":[[208,19]]}},"keywords":{}}],["nginx/nginx.conf.templ",{"_index":225,"title":{},"content":{"17":{"position":[[414,26]]}},"keywords":{}}],["noadmin",{"_index":717,"title":{},"content":{"57":{"position":[[361,7],[1230,7]]}},"keywords":{}}],["node:22",{"_index":212,"title":{},"content":{"17":{"position":[[240,7]]}},"keywords":{}}],["nodej",{"_index":181,"title":{},"content":{"13":{"position":[[948,7],[980,7]]}},"keywords":{}}],["nopayaccount",{"_index":718,"title":{},"content":{"57":{"position":[[414,12]]},"95":{"position":[[1143,12]]}},"keywords":{}}],["notfoundscreen",{"_index":955,"title":{},"content":{"79":{"position":[[725,15]]}},"keywords":{}}],["notifi",{"_index":521,"title":{},"content":{"43":{"position":[[1362,7]]},"56":{"position":[[2094,7],[2963,8]]},"64":{"position":[[1650,7]]},"94":{"position":[[397,7]]}},"keywords":{}}],["notifymock",{"_index":1135,"title":{},"content":{"95":{"position":[[435,10],[516,12],[560,11],[857,10]]}},"keywords":{}}],["notifyservic",{"_index":520,"title":{},"content":{"43":{"position":[[1347,14]]},"56":{"position":[[2079,14]]},"64":{"position":[[1635,14]]},"94":{"position":[[382,14]]}},"keywords":{}}],["npm",{"_index":221,"title":{},"content":{"17":{"position":[[338,3],[361,3]]}},"keywords":{}}],["number",{"_index":808,"title":{},"content":{"64":{"position":[[1051,7]]},"89":{"position":[[706,7],[1766,7],[2775,7]]},"93":{"position":[[274,7]]}},"keywords":{}}],["observ",{"_index":697,"title":{},"content":{"56":{"position":[[3074,11]]},"63":{"position":[[123,11]]},"71":{"position":[[949,8],[1072,11],[1917,11]]},"82":{"position":[[531,8],[828,11]]}},"keywords":{}}],["onclick={addtoshelf}>добав",{"_index":704,"title":{},"content":{"56":{"position":[[3271,32]]}},"keywords":{}}],["onclose={closepayaccount",{"_index":709,"title":{},"content":{"56":{"position":[[3393,25]]}},"keywords":{}}],["onretri",{"_index":787,"title":{},"content":{"63":{"position":[[582,8]]}},"keywords":{}}],["opendoccr",{"_index":523,"title":{},"content":{"43":{"position":[[1466,15]]}},"keywords":{}}],["openpayaccount",{"_index":688,"title":{},"content":{"56":{"position":[[2740,14]]},"64":{"position":[[2272,14]]}},"keywords":{}}],["openpaymentaccount",{"_index":1120,"title":{},"content":{"94":{"position":[[1441,18]]}},"keywords":{}}],["organ",{"_index":574,"title":{},"content":{"47":{"position":[[317,12],[373,12],[696,13],[725,12]]}},"keywords":{}}],["organizationmanag",{"_index":920,"title":{},"content":{"74":{"position":[[264,22],[419,24]]}},"keywords":{}}],["overhead",{"_index":970,"title":{},"content":{"80":{"position":[[65,9]]}},"keywords":{}}],["packag",{"_index":218,"title":{},"content":{"17":{"position":[[303,7]]}},"keywords":{}}],["package.json",{"_index":217,"title":{},"content":{"17":{"position":[[290,12]]}},"keywords":{}}],["page",{"_index":337,"title":{"78":{"position":[[28,5]]}},"content":{"30":{"position":[[24,4]]},"78":{"position":[[41,5],[127,4],[187,5]]},"79":{"position":[[20,6],[81,6]]}},"keywords":{}}],["pagebook",{"_index":335,"title":{},"content":{"30":{"position":[[7,8]]}},"keywords":{}}],["pagelayout",{"_index":982,"title":{},"content":{"82":{"position":[[575,11]]}},"keywords":{}}],["paid",{"_index":1083,"title":{},"content":{"92":{"position":[[4242,5],[5227,5]]}},"keywords":{}}],["partial<billingrepositorydto.billinginfo>",{"_index":1068,"title":{},"content":{"92":{"position":[[3001,48]]}},"keywords":{}}],["pay",{"_index":719,"title":{},"content":{"57":{"position":[[433,3]]}},"keywords":{}}],["payment",{"_index":803,"title":{},"content":{"64":{"position":[[868,10]]},"89":{"position":[[1583,10]]}},"keywords":{}}],["paymentaccount",{"_index":393,"title":{},"content":{"33":{"position":[[319,16]]}},"keywords":{}}],["paymentaccountfreeaccount",{"_index":379,"title":{},"content":{"33":{"position":[[32,25]]}},"keywords":{}}],["paymentpolicystor",{"_index":583,"title":{},"content":{"49":{"position":[[233,19]]},"53":{"position":[[757,19]]},"64":{"position":[[598,18]]},"89":{"position":[[1078,18],[1313,18]]}},"keywords":{}}],["paypermiss",{"_index":820,"title":{},"content":{"64":{"position":[[1873,13]]}},"keywords":{}}],["paypermission.hasreason(permissiondenialreason.notacceptag",{"_index":824,"title":{},"content":{"64":{"position":[[2053,62]]}},"keywords":{}}],["paypermission.isallow",{"_index":822,"title":{},"content":{"64":{"position":[[1956,25]]}},"keywords":{}}],["permiss",{"_index":316,"title":{"22":{"position":[[0,11]]},"27":{"position":[[14,11]]},"40":{"position":[[17,11]]},"41":{"position":[[0,11]]},"44":{"position":[[7,11]]},"45":{"position":[[7,11]]},"67":{"position":[[13,11]]},"69":{"position":[[9,11]]},"70":{"position":[[4,11]]},"71":{"position":[[34,11]]},"72":{"position":[[0,10]]},"87":{"position":[[33,12]]},"94":{"position":[[36,12]]},"95":{"position":[[4,12]]}},"content":{"33":{"position":[[627,10]]},"34":{"position":[[26,11]]},"41":{"position":[[1,11],[102,13],[194,12]]},"43":{"position":[[1261,12],[1501,10]]},"47":{"position":[[596,11]]},"49":{"position":[[67,12]]},"51":{"position":[[66,11],[211,10]]},"52":{"position":[[712,11]]},"53":{"position":[[1859,12]]},"54":{"position":[[77,11],[116,11]]},"56":{"position":[[2031,12]]},"57":{"position":[[60,11]]},"62":{"position":[[1675,10]]},"63":{"position":[[790,11]]},"64":{"position":[[463,11],[1414,11],[1587,12]]},"65":{"position":[[27,11],[88,11],[376,12]]},"67":{"position":[[21,11],[249,10]]},"68":{"position":[[74,10],[346,10],[575,11],[785,10],[961,11]]},"69":{"position":[[1,11]]},"70":{"position":[[48,10]]},"71":{"position":[[1638,12]]},"72":{"position":[[1,10],[125,11]]},"73":{"position":[[197,10],[957,10],[1122,10]]},"74":{"position":[[10,10]]},"77":{"position":[[91,12]]},"78":{"position":[[297,11]]},"79":{"position":[[183,12]]},"82":{"position":[[151,11],[362,11]]},"84":{"position":[[62,10],[166,11],[178,11],[452,11]]},"86":{"position":[[63,12]]},"87":{"position":[[22,11]]},"89":{"position":[[269,12],[317,11]]},"92":{"position":[[1012,11],[1085,10],[1257,10]]},"93":{"position":[[788,10]]},"94":{"position":[[131,11],[334,12]]},"95":{"position":[[13,11]]}},"keywords":{}}],["permission.hasreason(denialreason.noadmin",{"_index":865,"title":{},"content":{"70":{"position":[[149,42]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.noadmin",{"_index":528,"title":{},"content":{"43":{"position":[[1668,54]]}},"keywords":{}}],["permission.hasreason(permissiondenialreason.twofa",{"_index":530,"title":{},"content":{"43":{"position":[[1800,52]]}},"keywords":{}}],["permission.isallow",{"_index":526,"title":{},"content":{"43":{"position":[[1572,22]]},"84":{"position":[[509,22]]}},"keywords":{}}],["permission.reason",{"_index":1007,"title":{},"content":{"84":{"position":[[637,18],[780,18]]}},"keywords":{}}],["permission={permissionsstore.administration.administrationact",{"_index":880,"title":{},"content":{"71":{"position":[[1140,66]]},"82":{"position":[[896,66]]}},"keywords":{}}],["permissiondenialreason",{"_index":603,"title":{},"content":{"52":{"position":[[193,22]]},"56":{"position":[[1813,23]]},"57":{"position":[[296,22]]},"69":{"position":[[279,22]]},"82":{"position":[[634,23]]},"84":{"position":[[105,22]]}},"keywords":{}}],["permissiondenialreason.exceedreadingcount",{"_index":1118,"title":{},"content":{"94":{"position":[[1080,42]]}},"keywords":{}}],["permissiondenialreason.missingdata",{"_index":833,"title":{},"content":{"65":{"position":[[209,35],[257,34]]}},"keywords":{}}],["permissiondenialreason.missinguserag",{"_index":1011,"title":{},"content":{"84":{"position":[[803,38]]}},"keywords":{}}],["permissiondenialreason.noadmin",{"_index":989,"title":{},"content":{"82":{"position":[[979,33]]}},"keywords":{}}],["permissiondenialreason.nopayaccount",{"_index":1008,"title":{},"content":{"84":{"position":[[660,36]]},"92":{"position":[[4084,36],[4349,36]]},"94":{"position":[[845,36]]},"95":{"position":[[1268,36]]}},"keywords":{}}],["permissionguard",{"_index":985,"title":{},"content":{"82":{"position":[[710,15],[733,24]]},"84":{"position":[[431,15]]}},"keywords":{}}],["permissionrouteguard",{"_index":973,"title":{},"content":{"81":{"position":[[221,21],[244,20]]},"83":{"position":[[3,20]]}},"keywords":{}}],["permissions.books.addingtoshelf",{"_index":1108,"title":{},"content":{"94":{"position":[[43,32]]}},"keywords":{}}],["permissionsdenialreason",{"_index":735,"title":{},"content":{"57":{"position":[[957,23]]}},"keywords":{}}],["permissionsgateway",{"_index":886,"title":{},"content":{"71":{"position":[[1379,18]]}},"keywords":{}}],["permissionspolici",{"_index":660,"title":{},"content":{"56":{"position":[[748,18]]},"61":{"position":[[377,18]]},"64":{"position":[[644,18]]},"89":{"position":[[1359,18],[2211,18]]},"92":{"position":[[74,18]]}},"keywords":{}}],["permissionspolicymanagerstor",{"_index":802,"title":{},"content":{"64":{"position":[[691,30]]},"89":{"position":[[1406,30],[2258,30]]}},"keywords":{}}],["permissionsstatu",{"_index":774,"title":{},"content":{"63":{"position":[[189,17]]}},"keywords":{}}],["permissionsstatus.error",{"_index":786,"title":{},"content":{"63":{"position":[[555,26]]}},"keywords":{}}],["permissionsstor",{"_index":519,"title":{"53":{"position":[[38,17]]}},"content":{"43":{"position":[[1274,17]]},"49":{"position":[[106,17]]},"53":{"position":[[1,16],[852,16],[1703,16],[1726,17],[1872,17]]},"56":{"position":[[1837,17],[1855,17],[2044,17],[2945,17]]},"62":{"position":[[1,16],[363,16]]},"64":{"position":[[425,17],[1600,17]]},"71":{"position":[[993,16],[1651,17]]},"82":{"position":[[658,16]]},"86":{"position":[[102,17]]},"87":{"position":[[73,17]]},"94":{"position":[[347,17]]},"95":{"position":[[403,17]]}},"keywords":{}}],["permissionsstore.preparedata",{"_index":754,"title":{"62":{"position":[[0,28]]},"64":{"position":[[12,29]]}},"content":{"63":{"position":[[1,28],[268,31],[591,29]]}},"keywords":{}}],["permissionsstore.preparingdatastatu",{"_index":775,"title":{},"content":{"63":{"position":[[209,37]]}},"keywords":{}}],["permissionsstore.t",{"_index":585,"title":{},"content":{"49":{"position":[[286,19]]},"86":{"position":[[261,19]]}},"keywords":{}}],["permissionsstoremock",{"_index":1134,"title":{},"content":{"95":{"position":[[380,22],[675,20],[733,20],[1078,20],[1162,20]]}},"keywords":{}}],["permissionsstoreзапрашива",{"_index":796,"title":{},"content":{"64":{"position":[[274,29]]}},"keywords":{}}],["permissionstor",{"_index":588,"title":{},"content":{"49":{"position":[[400,16]]},"53":{"position":[[158,16]]}},"keywords":{}}],["permissionsвозможн",{"_index":638,"title":{},"content":{"53":{"position":[[2134,22]]}},"keywords":{}}],["placehold",{"_index":983,"title":{},"content":{"82":{"position":[[587,11],[1379,12]]},"84":{"position":[[10,11]]}},"keywords":{}}],["polici",{"_index":263,"title":{"23":{"position":[[0,9]]},"48":{"position":[[0,9]]},"54":{"position":[[31,9]]},"60":{"position":[[7,6]]},"62":{"position":[[56,7]]},"92":{"position":[[18,6]]}},"content":{"18":{"position":[[366,6]]},"43":{"position":[[237,7],[245,7]]},"49":{"position":[[37,9],[136,9],[361,8]]},"51":{"position":[[85,8],[151,8]]},"52":{"position":[[351,6],[446,7],[454,7]]},"53":{"position":[[684,13],[784,13],[2251,8]]},"54":{"position":[[1,8],[134,8],[239,8]]},"56":{"position":[[654,6],[740,7]]},"57":{"position":[[74,9]]},"60":{"position":[[8,6]]},"61":{"position":[[124,6],[283,6],[369,7],[699,6]]},"62":{"position":[[93,7],[1284,6],[1401,6],[1652,6]]},"64":{"position":[[636,7]]},"69":{"position":[[37,6],[437,6],[532,7],[540,7]]},"86":{"position":[[132,9]]},"89":{"position":[[1351,7],[2203,7]]},"92":{"position":[[8,7],[66,7],[1039,7]]}},"keywords":{}}],["policy.createpermiss",{"_index":859,"title":{},"content":{"69":{"position":[[61,24]]}},"keywords":{}}],["policymanag",{"_index":485,"title":{},"content":{"43":{"position":[[283,14]]},"52":{"position":[[492,14]]},"53":{"position":[[888,14],[1148,13]]},"56":{"position":[[780,14]]},"61":{"position":[[409,14],[718,13]]},"62":{"position":[[399,14],[659,13]]},"64":{"position":[[676,14]]},"69":{"position":[[578,14]]},"71":{"position":[[281,14]]},"89":{"position":[[1391,14],[2243,14]]},"92":{"position":[[106,14],[3067,13],[3533,14]]}},"keywords":{}}],["policymanager.createpolici",{"_index":608,"title":{},"content":{"52":{"position":[[627,26]]},"56":{"position":[[975,28]]},"61":{"position":[[604,28]]},"64":{"position":[[833,28]]},"89":{"position":[[1548,28],[2449,28]]},"92":{"position":[[301,28]]}},"keywords":{}}],["policymanager.preparedata",{"_index":759,"title":{},"content":{"62":{"position":[[1332,25]]}},"keywords":{}}],["policymanager.preparedataasync",{"_index":1080,"title":{},"content":{"92":{"position":[[3588,33]]}},"keywords":{}}],["policymanagerstor",{"_index":486,"title":{},"content":{"43":{"position":[[298,19]]},"52":{"position":[[331,19],[507,19]]},"53":{"position":[[472,18],[903,19]]},"56":{"position":[[634,19],[795,19]]},"61":{"position":[[263,19],[424,19]]},"62":{"position":[[196,18],[414,19],[1220,19],[1240,18]]},"69":{"position":[[417,19],[593,19]]},"71":{"position":[[296,19]]},"92":{"position":[[121,19],[2796,18]]}},"keywords":{}}],["pr",{"_index":92,"title":{},"content":{"8":{"position":[[125,2]]}},"keywords":{}}],["preparedata",{"_index":498,"title":{},"content":{"43":{"position":[[525,12]]},"52":{"position":[[886,12]]},"53":{"position":[[1530,11]]},"56":{"position":[[1019,12]]},"61":{"position":[[651,11],[732,12]]},"62":{"position":[[37,12],[1041,11],[1381,11]]},"64":{"position":[[189,12],[879,12]]},"69":{"position":[[782,12]]},"71":{"position":[[471,12]]},"89":{"position":[[1594,12],[2493,12]]},"92":{"position":[[345,12],[2782,12],[2846,11],[3865,12]]}},"keywords":{}}],["preparedataasync",{"_index":1067,"title":{},"content":{"92":{"position":[[2860,17]]}},"keywords":{}}],["preparedataи",{"_index":757,"title":{},"content":{"62":{"position":[[1308,12]]}},"keywords":{}}],["preparingdatastatu",{"_index":631,"title":{},"content":{"53":{"position":[[1602,21]]},"62":{"position":[[1113,21]]}},"keywords":{}}],["privat",{"_index":29,"title":{"3":{"position":[[37,7]]}},"content":{"43":{"position":[[220,7],[266,7],[318,7],[361,7],[1244,7],[1292,7],[1330,7],[1370,7]]},"52":{"position":[[429,7],[475,7],[527,7]]},"53":{"position":[[871,7]]},"56":{"position":[[723,7],[815,7],[864,7],[1981,7],[2014,7],[2062,7]]},"61":{"position":[[352,7],[444,7],[493,7]]},"62":{"position":[[382,7]]},"64":{"position":[[619,7],[722,7],[1537,7],[1570,7],[1618,7],[1658,7],[1758,7]]},"69":{"position":[[515,7],[561,7],[613,7]]},"71":{"position":[[264,7],[316,7]]},"89":{"position":[[1334,7],[1437,7],[2186,7],[2289,7],[2338,7]]},"92":{"position":[[49,7],[141,7],[190,7]]},"94":{"position":[[317,7],[365,7]]}},"keywords":{}}],["process.env",{"_index":114,"title":{},"content":{"11":{"position":[[188,11]]}},"keywords":{}}],["prod",{"_index":208,"title":{"16":{"position":[[0,4]]}},"content":{},"keywords":{}}],["product",{"_index":222,"title":{},"content":{"17":{"position":[[346,10]]}},"keywords":{}}],["promise<void>",{"_index":500,"title":{},"content":{"43":{"position":[[548,19]]},"52":{"position":[[909,19]]},"69":{"position":[[805,19]]},"71":{"position":[[494,19]]}},"keywords":{}}],["promise.al",{"_index":661,"title":{},"content":{"56":{"position":[[1055,13]]},"61":{"position":[[768,13]]},"89":{"position":[[2529,13]]},"92":{"position":[[381,13]]}},"keywords":{}}],["promise.all([this.userrepo.getrolesquery().async",{"_index":502,"title":{},"content":{"43":{"position":[[582,53]]},"52":{"position":[[943,53]]},"69":{"position":[[839,53]]},"71":{"position":[[528,53]]}},"keywords":{}}],["promise.all([userrepo.getpersoninfoquery().async",{"_index":804,"title":{},"content":{"64":{"position":[[915,53]]},"89":{"position":[[1630,53]]}},"keywords":{}}],["prop",{"_index":694,"title":{},"content":{"56":{"position":[[3025,5],[3092,6]]},"82":{"position":[[763,5],[852,6]]},"84":{"position":[[156,5],[491,6]]}},"keywords":{}}],["public",{"_index":28,"title":{"3":{"position":[[28,6]]}},"content":{"15":{"position":[[386,6]]},"43":{"position":[[688,6],[1459,6]]},"53":{"position":[[923,6],[982,6],[1523,6],[1591,6],[1944,6]]},"56":{"position":[[1214,6],[1935,6],[2158,6],[2733,6],[2801,6]]},"61":{"position":[[971,6]]},"62":{"position":[[434,6],[493,6],[1034,6],[1102,6]]},"64":{"position":[[1014,6],[1491,6],[1843,6],[2265,6],[2333,6]]},"69":{"position":[[945,6]]},"71":{"position":[[634,6],[1723,6]]},"73":{"position":[[270,6],[485,6],[703,6],[1254,6]]},"74":{"position":[[297,6],[340,6],[375,6],[408,6],[465,6],[501,6]]},"75":{"position":[[77,6],[146,6]]},"89":{"position":[[1729,6],[2731,6]]},"92":{"position":[[540,6],[1406,6],[4468,6]]},"94":{"position":[[267,6],[437,6],[1434,6],[1510,6]]}},"keywords":{}}],["public_api_url",{"_index":288,"title":{},"content":{"19":{"position":[[121,15]]}},"keywords":{}}],["public_release_tag",{"_index":292,"title":{},"content":{"19":{"position":[[199,19]]}},"keywords":{}}],["public_sentry_dsn",{"_index":290,"title":{},"content":{"19":{"position":[[145,18]]}},"keywords":{}}],["public_sentry_env",{"_index":291,"title":{},"content":{"19":{"position":[[172,18]]}},"keywords":{}}],["public_ws_url",{"_index":256,"title":{},"content":{"18":{"position":[[260,17],[392,17],[627,13]]}},"keywords":{}}],["public_созда",{"_index":200,"title":{},"content":{"15":{"position":[[203,14]]},"17":{"position":[[864,14]]}},"keywords":{}}],["quot;${public_ws_url}"",{"_index":279,"title":{},"content":{"18":{"position":[[742,28]]}},"keywords":{}}],["quot;/usr/share/nginx/html/scripts/startup.prod.sh"",{"_index":237,"title":{},"content":{"17":{"position":[[639,58]]}},"keywords":{}}],["quot;sh"",{"_index":236,"title":{},"content":{"17":{"position":[[622,16]]}},"keywords":{}}],["quot;базовый"",{"_index":852,"title":{},"content":{"68":{"position":[[727,19]]}},"keywords":{}}],["quot;добав",{"_index":566,"title":{},"content":{"47":{"position":[[20,14]]},"56":{"position":[[225,14]]}},"keywords":{}}],["quot;достигнут",{"_index":656,"title":{},"content":{"56":{"position":[[402,16]]}},"keywords":{}}],["quot;доступ",{"_index":911,"title":{},"content":{"74":{"position":[[48,12]]}},"keywords":{}}],["quot;ознакомл",{"_index":855,"title":{},"content":{"68":{"position":[[903,16]]}},"keywords":{}}],["quot;отправить"",{"_index":853,"title":{},"content":{"68":{"position":[[853,21]]}},"keywords":{}}],["quot;размазыванию"",{"_index":398,"title":{},"content":{"33":{"position":[[499,24]]}},"keywords":{}}],["quot;редактирова",{"_index":847,"title":{},"content":{"68":{"position":[[224,19]]}},"keywords":{}}],["quot;созда",{"_index":383,"title":{},"content":{"33":{"position":[[85,13]]},"34":{"position":[[83,13]]},"68":{"position":[[8,13],[509,13],[670,13]]},"71":{"position":[[20,13]]},"73":{"position":[[8,13]]}},"keywords":{}}],["quot;удал",{"_index":569,"title":{},"content":{"47":{"position":[[107,13]]}},"keywords":{}}],["rbac",{"_index":343,"title":{"32":{"position":[[44,5]]},"33":{"position":[[9,4]]}},"content":{"32":{"position":[[104,4],[291,4]]}},"keywords":{}}],["react",{"_index":876,"title":{},"content":{"71":{"position":[[971,5]]},"82":{"position":[[513,8],[553,5]]}},"keywords":{}}],["reactnod",{"_index":981,"title":{},"content":{"82":{"position":[[496,9],[783,10]]},"84":{"position":[[328,10]]}},"keywords":{}}],["reactnode>",{"_index":1004,"title":{},"content":{"84":{"position":[[303,14]]}},"keywords":{}}],["read",{"_index":336,"title":{},"content":{"30":{"position":[[16,7]]}},"keywords":{}}],["reading.tsx",{"_index":945,"title":{},"content":{"79":{"position":[[152,11]]}},"keywords":{}}],["readingbook",{"_index":595,"title":{},"content":{"51":{"position":[[342,11]]},"74":{"position":[[386,13]]}},"keywords":{}}],["readingbookpag",{"_index":959,"title":{},"content":{"79":{"position":[[913,15],[1192,16]]}},"keywords":{}}],["readingbookrouteguard",{"_index":932,"title":{},"content":{"77":{"position":[[187,22]]},"79":{"position":[[279,22],[846,21]]}},"keywords":{}}],["readingbookscreen",{"_index":956,"title":{},"content":{"79":{"position":[[741,17]]}},"keywords":{}}],["readingbookдоступ",{"_index":919,"title":{},"content":{"74":{"position":[[211,17]]}},"keywords":{}}],["readonli",{"_index":483,"title":{},"content":{"43":{"position":[[228,8],[274,8],[326,8],[369,8],[1252,8],[1300,8],[1338,8],[1378,8]]},"52":{"position":[[437,8],[483,8],[535,8]]},"53":{"position":[[879,8],[930,8],[989,8],[1850,8]]},"56":{"position":[[731,8],[823,8],[872,8],[1989,8],[2022,8],[2070,8]]},"61":{"position":[[360,8],[452,8],[501,8]]},"62":{"position":[[390,8],[441,8],[500,8]]},"64":{"position":[[627,8],[730,8],[1545,8],[1578,8],[1626,8],[1666,8]]},"69":{"position":[[523,8],[569,8],[621,8]]},"71":{"position":[[272,8],[324,8],[1629,8]]},"89":{"position":[[1342,8],[1445,8],[2194,8],[2297,8],[2346,8]]},"92":{"position":[[57,8],[149,8],[198,8]]},"94":{"position":[[325,8],[373,8]]}},"keywords":{}}],["reason",{"_index":322,"title":{"24":{"position":[[0,8]]},"55":{"position":[[0,8]]},"57":{"position":[[4,7]]}},"content":{"57":{"position":[[89,7],[215,7],[811,8],[863,7]]},"58":{"position":[[13,6],[106,7]]},"65":{"position":[[137,7],[201,7],[250,6]]},"70":{"position":[[117,8],[206,8]]},"92":{"position":[[3968,7],[4063,6]]}},"keywords":{}}],["reasonзначен",{"_index":744,"title":{},"content":{"58":{"position":[[91,14]]}},"keywords":{}}],["reasonпоследн",{"_index":1099,"title":{},"content":{"93":{"position":[[158,15]]}},"keywords":{}}],["record<str",{"_index":1003,"title":{},"content":{"84":{"position":[[285,17]]}},"keywords":{}}],["render",{"_index":74,"title":{},"content":{"6":{"position":[[121,10]]}},"keywords":{}}],["renderrout",{"_index":772,"title":{},"content":{"63":{"position":[[149,12]]}},"keywords":{}}],["replac",{"_index":113,"title":{},"content":{"11":{"position":[[180,7]]}},"keywords":{}}],["return",{"_index":504,"title":{},"content":{"43":{"position":[[725,6],[994,6],[1090,6],[1655,7],[1787,7],[1967,7]]},"53":{"position":[[1626,6],[1981,6]]},"56":{"position":[[1243,6],[1352,6],[1462,6],[1601,6],[2311,7],[2432,7],[2622,7],[3205,6]]},"61":{"position":[[1000,6],[1109,6],[1219,6],[1358,6]]},"62":{"position":[[1137,6]]},"63":{"position":[[360,6]]},"64":{"position":[[1258,6],[1788,6],[2040,7],[2165,7]]},"69":{"position":[[982,6],[1111,6]]},"71":{"position":[[671,6],[787,6],[1092,6],[1760,6],[1998,6]]},"73":{"position":[[307,6],[423,6],[525,6],[641,6],[738,6],[854,6],[1291,6],[1407,6]]},"79":{"position":[[554,6],[987,6],[1057,6]]},"82":{"position":[[867,6],[1628,6]]},"84":{"position":[[534,6],[592,6],[699,6],[844,6],[934,6]]},"89":{"position":[[800,6],[872,6],[1004,6],[1973,6],[2791,6],[2991,6],[3119,6]]},"92":{"position":[[569,6],[678,6],[788,6],[927,6],[1435,6],[1582,6],[1742,6],[1944,6],[3622,6],[4497,6],[4606,6],[4716,6],[4855,6]]},"93":{"position":[[368,6],[440,6],[584,6]]},"94":{"position":[[686,7],[915,7],[1210,7]]},"95":{"position":[[551,6]]}},"keywords":{}}],["role",{"_index":353,"title":{},"content":{"32":{"position":[[109,5]]},"90":{"position":[[107,6],[298,6]]}},"keywords":{}}],["rout",{"_index":331,"title":{"29":{"position":[[0,5]]},"30":{"position":[[14,5]]},"76":{"position":[[0,5]]},"81":{"position":[[9,5]]}},"content":{"77":{"position":[[5,5]]},"78":{"position":[[1,5],[103,5]]},"80":{"position":[[15,5],[125,5]]},"81":{"position":[[63,5],[176,5],[307,5]]}},"keywords":{}}],["routeguards)взаимодейств",{"_index":462,"title":{},"content":{"38":{"position":[[294,27]]}},"keywords":{}}],["router",{"_index":522,"title":{},"content":{"43":{"position":[[1387,7],[1395,7]]}},"keywords":{}}],["routesguard",{"_index":930,"title":{},"content":{"77":{"position":[[132,13]]},"79":{"position":[[224,13]]}},"keywords":{}}],["rule",{"_index":324,"title":{"25":{"position":[[0,6]]},"26":{"position":[[14,6]]},"85":{"position":[[0,6]]},"87":{"position":[[0,5]]},"88":{"position":[[11,6]]},"93":{"position":[[13,6]]}},"content":{"54":{"position":[[305,6]]},"64":{"position":[[570,14]]},"86":{"position":[[36,6],[154,6]]},"87":{"position":[[1,5]]},"88":{"position":[[1,5]]},"89":{"position":[[423,5],[1285,14],[2139,14]]},"90":{"position":[[5,5]]},"93":{"position":[[18,5]]}},"keywords":{}}],["run",{"_index":220,"title":{},"content":{"17":{"position":[[334,3],[357,3],[365,3]]}},"keywords":{}}],["runtim",{"_index":417,"title":{},"content":{"34":{"position":[[329,7]]}},"keywords":{}}],["secur",{"_index":262,"title":{},"content":{"18":{"position":[[357,8]]}},"keywords":{}}],["self",{"_index":266,"title":{},"content":{"18":{"position":[[385,6]]}},"keywords":{}}],["server",{"_index":170,"title":{},"content":{"13":{"position":[[586,6]]},"15":{"position":[[92,6]]},"18":{"position":[[298,6]]}},"keywords":{}}],["setup",{"_index":1062,"title":{},"content":{"92":{"position":[[2298,7],[2925,5],[3759,7],[4203,7],[5188,7]]},"95":{"position":[[372,5]]}},"keywords":{}}],["setup(permissionsstoremock",{"_index":1140,"title":{},"content":{"95":{"position":[[872,28],[1331,28]]}},"keywords":{}}],["share",{"_index":607,"title":{},"content":{"52":{"position":[[315,6]]},"53":{"position":[[451,6]]},"56":{"position":[[618,6]]},"61":{"position":[[247,6]]},"62":{"position":[[175,6]]},"69":{"position":[[401,6]]},"89":{"position":[[598,6]]}},"keywords":{}}],["shelf",{"_index":1090,"title":{},"content":{"92":{"position":[[5289,6]]}},"keywords":{}}],["shell",{"_index":232,"title":{},"content":{"17":{"position":[[570,5]]}},"keywords":{}}],["showcreationdocbutton",{"_index":901,"title":{},"content":{"73":{"position":[[208,22],[281,23]]}},"keywords":{}}],["showeditingdocmod",{"_index":903,"title":{},"content":{"73":{"position":[[714,21]]}},"keywords":{}}],["side",{"_index":73,"title":{},"content":{"6":{"position":[[116,4]]}},"keywords":{}}],["sidebar",{"_index":869,"title":{},"content":{"71":{"position":[[48,7],[1062,7],[1907,7]]}},"keywords":{}}],["singleton",{"_index":614,"title":{},"content":{"53":{"position":[[24,9],[1680,9]]}},"keywords":{}}],["src",{"_index":265,"title":{},"content":{"18":{"position":[[381,3]]}},"keywords":{}}],["ssg",{"_index":16,"title":{"2":{"position":[[14,3]]}},"content":{"2":{"position":[[14,3],[152,3]]}},"keywords":{}}],["ssr",{"_index":15,"title":{"2":{"position":[[8,3]]}},"content":{"2":{"position":[[8,3],[146,3]]}},"keywords":{}}],["startup.prod.sh",{"_index":238,"title":{},"content":{"17":{"position":[[707,16],[732,15],[756,15]]},"18":{"position":[[431,15],[848,15]]}},"keywords":{}}],["store",{"_index":581,"title":{},"content":{"49":{"position":[[88,7]]},"86":{"position":[[84,7]]}},"keywords":{}}],["string",{"_index":289,"title":{},"content":{"19":{"position":[[137,7],[164,7],[191,7],[219,7]]},"56":{"position":[[2006,7],[2911,7],[3039,7]]},"58":{"position":[[126,6]]},"64":{"position":[[1562,7]]},"70":{"position":[[126,7],[215,7]]},"75":{"position":[[111,7],[181,7]]},"89":{"position":[[729,7]]},"90":{"position":[[114,7],[217,8],[241,7],[305,7],[369,8],[393,7]]},"93":{"position":[[297,7]]},"94":{"position":[[466,7]]}},"keywords":{}}],["sut",{"_index":1061,"title":{},"content":{"92":{"position":[[2284,3],[3505,3],[3631,3],[3745,3],[4189,3],[5174,3]]},"95":{"position":[[476,3],[572,3],[1323,3]]}},"keywords":{}}],["sut.addtoshelf('id",{"_index":1138,"title":{},"content":{"95":{"position":[[529,21]]}},"keywords":{}}],["systemdenialreason",{"_index":723,"title":{},"content":{"57":{"position":[[585,18],[842,18],[896,18]]}},"keywords":{}}],["systemdenialreason.internalerror",{"_index":736,"title":{},"content":{"57":{"position":[[1048,33]]}},"keywords":{}}],["systemdenialreason.missingdata",{"_index":737,"title":{},"content":{"57":{"position":[[1153,31]]}},"keywords":{}}],["theme={theme}>",{"_index":779,"title":{},"content":{"63":{"position":[[387,17]]}},"keywords":{}}],["this.administr",{"_index":626,"title":{},"content":{"53":{"position":[[1293,19]]},"62":{"position":[[804,19]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().async",{"_index":663,"title":{},"content":{"56":{"position":[[1108,47]]},"61":{"position":[[865,47]]},"89":{"position":[[2626,47]]},"92":{"position":[[434,47]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery().data",{"_index":1038,"title":{},"content":{"89":{"position":[[3048,44]]}},"keywords":{}}],["this.billingrepo.getbillinginfoquery()?.data",{"_index":666,"title":{},"content":{"56":{"position":[[1390,45]]},"61":{"position":[[1147,45]]},"92":{"position":[[716,45],[1620,45],[4644,45]]}},"keywords":{}}],["this.book",{"_index":627,"title":{},"content":{"53":{"position":[[1381,10]]},"62":{"position":[[892,10]]}},"keywords":{}}],["this.bookid",{"_index":681,"title":{},"content":{"56":{"position":[[2274,14]]}},"keywords":{}}],["this.booksrepo.getbookbyidquery(this.bookid",{"_index":818,"title":{},"content":{"64":{"position":[[1795,45]]}},"keywords":{}}],["this.isopenaccountpay",{"_index":1121,"title":{},"content":{"94":{"position":[[1473,25],[1550,25]]}},"keywords":{}}],["this.isopenpayaccount",{"_index":689,"title":{},"content":{"56":{"position":[[2768,21],[2837,21]]},"64":{"position":[[2300,21],[2369,21]]}},"keywords":{}}],["this.notifyservice.error",{"_index":529,"title":{},"content":{"43":{"position":[[1725,25],[1918,25],[1977,25]]},"56":{"position":[[2541,25],[2632,25]]},"64":{"position":[[2175,25]]},"94":{"position":[[1129,25],[1333,25]]}},"keywords":{}}],["this.notifyservice.error('вы",{"_index":825,"title":{},"content":{"64":{"position":[[2118,28]]}},"keywords":{}}],["this.notifyservice.info(`книг",{"_index":680,"title":{},"content":{"56":{"position":[[2243,30]]},"94":{"position":[[623,30]]}},"keywords":{}}],["this.notifyservice.success(`книг",{"_index":823,"title":{},"content":{"64":{"position":[[1984,33]]}},"keywords":{}}],["this.openpaymentaccount",{"_index":683,"title":{},"content":{"56":{"position":[[2405,26]]},"94":{"position":[[888,26]]}},"keywords":{}}],["this.permissions.administration.administrationact",{"_index":525,"title":{},"content":{"43":{"position":[[1514,54]]}},"keywords":{}}],["this.permissions.administration.administrationactions.isallow",{"_index":636,"title":{},"content":{"53":{"position":[[1988,64]]},"71":{"position":[[1767,64]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason",{"_index":1116,"title":{},"content":{"94":{"position":[[797,47],[1032,47]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.exceedreadingcount",{"_index":684,"title":{},"content":{"56":{"position":[[2447,89]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.hasreason(permissiondenialreason.nopay",{"_index":682,"title":{},"content":{"56":{"position":[[2324,78]]}},"keywords":{}}],["this.permissions.books.addingtoshelf.isallow",{"_index":679,"title":{},"content":{"56":{"position":[[2192,48]]},"94":{"position":[[572,48]]}},"keywords":{}}],["this.permissions.calcpayment(this.bookbyidquery.acceptableag",{"_index":821,"title":{},"content":{"64":{"position":[[1889,63]]}},"keywords":{}}],["this.polici",{"_index":494,"title":{},"content":{"43":{"position":[[453,11]]},"52":{"position":[[724,11]]},"56":{"position":[[961,11]]},"61":{"position":[[590,11]]},"64":{"position":[[819,11]]},"69":{"position":[[710,11]]},"89":{"position":[[1534,11],[2435,11]]},"92":{"position":[[287,11]]}},"keywords":{}}],["this.policy.createpermission((allow",{"_index":505,"title":{},"content":{"43":{"position":[[732,36]]},"56":{"position":[[1250,36]]},"61":{"position":[[1007,36]]},"64":{"position":[[1065,36]]},"69":{"position":[[989,36]]},"89":{"position":[[1780,36],[2798,36]]},"92":{"position":[[576,36],[1442,36],[4504,36]]}},"keywords":{}}],["this.policymanag",{"_index":625,"title":{},"content":{"53":{"position":[[1244,18],[1348,19],[1418,19]]},"62":{"position":[[755,18],[859,19],[929,19]]}},"keywords":{}}],["this.policymanager.createpermission((allow",{"_index":871,"title":{},"content":{"71":{"position":[[678,43]]},"73":{"position":[[314,43],[532,43],[745,43],[1298,43]]}},"keywords":{}}],["this.policymanager.createpolici",{"_index":495,"title":{},"content":{"43":{"position":[[467,33]]},"52":{"position":[[738,33]]},"69":{"position":[[724,33]]},"71":{"position":[[413,33]]}},"keywords":{}}],["this.policymanager.preparedatasync",{"_index":630,"title":{},"content":{"53":{"position":[[1553,37]]},"62":{"position":[[1064,37]]}},"keywords":{}}],["this.policymanager.preparingdatastatu",{"_index":632,"title":{},"content":{"53":{"position":[[1633,39]]},"62":{"position":[[1144,39]]}},"keywords":{}}],["this.router.push(app_routes.createdoc.getredirectpath",{"_index":527,"title":{},"content":{"43":{"position":[[1597,57]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().async",{"_index":753,"title":{},"content":{"61":{"position":[[821,43]]},"89":{"position":[[2582,43]]}},"keywords":{}}],["this.userrepo.getpersoninfoquery().data?.birthday",{"_index":810,"title":{},"content":{"64":{"position":[[1172,50]]},"89":{"position":[[1887,50],[2905,50]]}},"keywords":{}}],["this.userrepo.getrolesquery().async",{"_index":662,"title":{},"content":{"56":{"position":[[1069,38]]},"61":{"position":[[782,38]]},"89":{"position":[[2543,38]]},"92":{"position":[[395,38]]}},"keywords":{}}],["this.userrepo.getrolesquery().data?.isadmin",{"_index":515,"title":{},"content":{"43":{"position":[[1042,45]]},"56":{"position":[[1304,45]]},"61":{"position":[[1061,45]]},"69":{"position":[[1043,45]]},"71":{"position":[[739,45]]},"73":{"position":[[375,45],[593,45],[806,45],[1359,45]]},"92":{"position":[[630,45],[1534,45],[4558,45]]}},"keywords":{}}],["time",{"_index":102,"title":{"11":{"position":[[31,5]]}},"content":{"11":{"position":[[23,4]]}},"keywords":{}}],["titl",{"_index":992,"title":{},"content":{"82":{"position":[[1040,6]]}},"keywords":{}}],["title="доступн",{"_index":995,"title":{},"content":{"82":{"position":[[1113,20]]}},"keywords":{}}],["title="книг",{"_index":961,"title":{},"content":{"79":{"position":[[1013,17]]}},"keywords":{}}],["title="необходим",{"_index":1009,"title":{},"content":{"84":{"position":[[722,22],[867,22]]}},"keywords":{}}],["title="нет",{"_index":1016,"title":{},"content":{"84":{"position":[[957,15]]}},"keywords":{}}],["to={app_routes.createbook.getredirectpath()}>",{"_index":882,"title":{},"content":{"71":{"position":[[1230,48],[2094,48]]}},"keywords":{}}],["toggl",{"_index":471,"title":{"40":{"position":[[8,6]]},"41":{"position":[[39,7]]}},"content":{"41":{"position":[[40,6],[81,6],[116,8],[153,6]]},"67":{"position":[[292,6]]},"68":{"position":[[597,7]]}},"keywords":{}}],["true",{"_index":493,"title":{},"content":{"43":{"position":[[444,4],[1448,4]]},"52":{"position":[[615,4]]},"53":{"position":[[1136,4],[1933,4]]},"56":{"position":[[952,4],[2147,4],[2792,5]]},"61":{"position":[[581,4]]},"62":{"position":[[647,4]]},"64":{"position":[[810,4],[1747,4],[2324,5]]},"69":{"position":[[701,4]]},"71":{"position":[[404,4],[1712,4]]},"89":{"position":[[1525,4],[2426,4]]},"92":{"position":[[278,4],[2315,4],[3776,4],[5233,5]]},"94":{"position":[[1501,5]]}},"keywords":{}}],["two",{"_index":474,"title":{"42":{"position":[[4,4]]}},"content":{},"keywords":{}}],["twofa",{"_index":489,"title":{},"content":{"43":{"position":[[378,6],[791,5],[1309,6]]}},"keywords":{}}],["twofa.ispass",{"_index":513,"title":{},"content":{"43":{"position":[[974,17]]}},"keywords":{}}],["twofaservic",{"_index":490,"title":{},"content":{"43":{"position":[[385,13],[1316,13]]}},"keywords":{}}],["type",{"_index":601,"title":{},"content":{"52":{"position":[[138,4]]},"53":{"position":[[313,4],[465,4],[705,4]]},"56":{"position":[[3020,4]]},"62":{"position":[[189,4]]},"65":{"position":[[146,4]]},"69":{"position":[[224,4]]},"70":{"position":[[43,4]]},"82":{"position":[[489,4],[758,4]]},"84":{"position":[[55,4],[151,4]]}},"keywords":{}}],["ui",{"_index":366,"title":{"72":{"position":[[33,3]]}},"content":{"32":{"position":[[364,3],[570,3]]},"71":{"position":[[1435,2]]},"72":{"position":[[55,3],[95,2]]},"73":{"position":[[970,2]]}},"keywords":{}}],["uistor",{"_index":327,"title":{"27":{"position":[[28,8]]},"94":{"position":[[13,8]]}},"content":{"43":{"position":[[1221,7]]},"53":{"position":[[1820,7]]},"56":{"position":[[1925,7]]},"64":{"position":[[1481,7]]},"71":{"position":[[1524,8],[1599,7]]},"94":{"position":[[24,7],[161,7],[257,7]]}},"keywords":{}}],["uistore(bookid",{"_index":692,"title":{},"content":{"56":{"position":[[2929,15]]}},"keywords":{}}],["uistore(permissionsstoremock",{"_index":1137,"title":{},"content":{"95":{"position":[[486,29]]}},"keywords":{}}],["useeffect",{"_index":776,"title":{},"content":{"63":{"position":[[247,12]]}},"keywords":{}}],["userbirthday",{"_index":1027,"title":{},"content":{"89":{"position":[[714,14],[854,15]]},"90":{"position":[[226,14],[378,14]]},"93":{"position":[[282,14],[422,15]]}},"keywords":{}}],["userouterparam",{"_index":957,"title":{},"content":{"79":{"position":[[795,15],[957,18]]}},"keywords":{}}],["useroutes(rout",{"_index":773,"title":{},"content":{"63":{"position":[[164,18]]}},"keywords":{}}],["userrepo",{"_index":487,"title":{},"content":{"43":{"position":[[335,9]]},"52":{"position":[[544,9]]},"53":{"position":[[1067,9],[1368,9],[1451,9]]},"56":{"position":[[881,9]]},"61":{"position":[[510,9]]},"62":{"position":[[578,9],[879,9],[962,9]]},"64":{"position":[[739,9]]},"69":{"position":[[630,9]]},"71":{"position":[[333,9]]},"89":{"position":[[1454,9],[2355,9]]},"92":{"position":[[207,9]]}},"keywords":{}}],["userrepomock",{"_index":1071,"title":{},"content":{"92":{"position":[[3160,12],[3565,13]]}},"keywords":{}}],["userrepositori",{"_index":488,"title":{},"content":{"43":{"position":[[345,15]]},"52":{"position":[[145,14],[554,15]]},"53":{"position":[[267,14],[339,14],[1077,15],[1763,15]]},"56":{"position":[[891,15]]},"61":{"position":[[74,14],[520,15]]},"62":{"position":[[588,15]]},"64":{"position":[[749,15]]},"69":{"position":[[231,14],[640,15]]},"71":{"position":[[343,15]]},"89":{"position":[[1464,15],[2365,15]]},"92":{"position":[[217,15]]}},"keywords":{}}],["usest",{"_index":698,"title":{},"content":{"56":{"position":[[3167,11]]}},"keywords":{}}],["usestate(createuistor",{"_index":892,"title":{},"content":{"71":{"position":[[1973,24]]}},"keywords":{}}],["usr/share/nginx/html",{"_index":229,"title":{},"content":{"17":{"position":[[508,21]]}},"keywords":{}}],["usr/src/app",{"_index":215,"title":{},"content":{"17":{"position":[[272,12]]}},"keywords":{}}],["usr/src/app/dist",{"_index":228,"title":{},"content":{"17":{"position":[[490,17]]}},"keywords":{}}],["ux",{"_index":456,"title":{},"content":{"38":{"position":[[117,2]]}},"keywords":{}}],["valid",{"_index":921,"title":{},"content":{"74":{"position":[[290,5]]},"75":{"position":[[70,5]]},"90":{"position":[[34,5]]}},"keywords":{}}],["vite",{"_index":45,"title":{},"content":{"4":{"position":[[229,4]]},"5":{"position":[[151,5]]},"10":{"position":[[21,4]]},"11":{"position":[[160,7]]},"15":{"position":[[311,4]]}},"keywords":{}}],["vite_",{"_index":51,"title":{},"content":{"4":{"position":[[299,6]]}},"keywords":{}}],["vitest",{"_index":1129,"title":{},"content":{"95":{"position":[[72,6],[168,7]]}},"keywords":{}}],["webpack",{"_index":54,"title":{},"content":{"5":{"position":[[34,8]]},"15":{"position":[[376,7]]}},"keywords":{}}],["webpack)перемен",{"_index":119,"title":{},"content":{"11":{"position":[[252,19]]}},"keywords":{}}],["white",{"_index":125,"title":{},"content":{"11":{"position":[[423,5]]}},"keywords":{}}],["window",{"_index":287,"title":{},"content":{"19":{"position":[[101,6]]}},"keywords":{}}],["window.__env__",{"_index":167,"title":{},"content":{"13":{"position":[[465,18]]},"15":{"position":[[425,17]]},"17":{"position":[[955,17]]},"19":{"position":[[60,14],[290,14]]}},"keywords":{}}],["window.__env__.public_api_url",{"_index":296,"title":{},"content":{"19":{"position":[[366,30]]}},"keywords":{}}],["window.__env__.public_release_tag",{"_index":302,"title":{},"content":{"19":{"position":[[516,34]]}},"keywords":{}}],["window.__env__.public_sentry_dsn",{"_index":298,"title":{},"content":{"19":{"position":[[412,33]]}},"keywords":{}}],["window.__env__.public_sentry_env",{"_index":300,"title":{},"content":{"19":{"position":[[463,33]]}},"keywords":{}}],["window.__env__={"public_api_url":"https://astral.ru"",{"_index":207,"title":{},"content":{"15":{"position":[[448,74]]},"17":{"position":[[978,74]]}},"keywords":{}}],["workdir",{"_index":214,"title":{},"content":{"17":{"position":[[264,7]]}},"keywords":{}}],["xaml",{"_index":340,"title":{"31":{"position":[[19,4]]}},"content":{},"keywords":{}}],["а",{"_index":182,"title":{},"content":{"13":{"position":[[956,1]]},"68":{"position":[[587,1]]}},"keywords":{}}],["абстрактн",{"_index":874,"title":{},"content":{"71":{"position":[[910,11]]},"73":{"position":[[1110,11]]},"81":{"position":[[208,12]]}},"keywords":{}}],["админ",{"_index":738,"title":{},"content":{"57":{"position":[[1216,7]]}},"keywords":{}}],["администратор",{"_index":478,"title":{},"content":{"43":{"position":[[48,14],[670,14],[1768,15]]},"57":{"position":[[339,15]]},"68":{"position":[[53,14]]},"69":{"position":[[927,14]]},"71":{"position":[[103,16],[616,14]]},"73":{"position":[[84,15],[1199,15]]},"74":{"position":[[135,14]]},"82":{"position":[[84,15],[1055,15]]},"92":{"position":[[1516,14],[2242,16],[3703,16]]}},"keywords":{}}],["администраторов"",{"_index":996,"title":{},"content":{"82":{"position":[[1145,21]]}},"keywords":{}}],["админск",{"_index":1041,"title":{},"content":{"90":{"position":[[57,9]]}},"keywords":{}}],["аккаунт",{"_index":387,"title":{},"content":{"33":{"position":[[150,9]]},"34":{"position":[[148,9],[264,7]]},"43":{"position":[[2058,9]]},"56":{"position":[[72,7],[191,8]]},"57":{"position":[[389,7]]},"67":{"position":[[136,8]]},"68":{"position":[[303,9],[469,7]]},"92":{"position":[[1697,7],[2029,7],[2399,7],[2623,7],[4004,7],[4143,7],[5078,7]]}},"keywords":{}}],["аккаунт"",{"_index":1010,"title":{},"content":{"84":{"position":[[754,13]]}},"keywords":{}}],["аккумулирова",{"_index":1087,"title":{},"content":{"92":{"position":[[5007,14]]}},"keywords":{}}],["актив",{"_index":857,"title":{},"content":{"68":{"position":[[944,7]]}},"keywords":{}}],["активн",{"_index":479,"title":{},"content":{"43":{"position":[[65,8]]}},"keywords":{}}],["алгоритм",{"_index":1047,"title":{"92":{"position":[[0,8]]}},"content":{},"keywords":{}}],["архитектур",{"_index":2,"title":{"0":{"position":[[15,11]]}},"content":{"7":{"position":[[6,11]]}},"keywords":{}}],["архитектурн",{"_index":889,"title":{},"content":{"71":{"position":[[1457,13]]}},"keywords":{}}],["архитектурыкак",{"_index":69,"title":{},"content":{"6":{"position":[[58,14]]}},"keywords":{}}],["асинхрон",{"_index":307,"title":{},"content":{"20":{"position":[[94,12]]},"92":{"position":[[2828,11]]}},"keywords":{}}],["астра",{"_index":80,"title":{},"content":{"7":{"position":[[119,6]]}},"keywords":{}}],["аутентификац",{"_index":413,"title":{},"content":{"34":{"position":[[190,15]]}},"keywords":{}}],["базов",{"_index":565,"title":{},"content":{"46":{"position":[[766,7]]}},"keywords":{}}],["баланс",{"_index":763,"title":{},"content":{"62":{"position":[[1556,6]]}},"keywords":{}}],["безопасн",{"_index":26,"title":{"3":{"position":[[0,13]]}},"content":{},"keywords":{}}],["библиотек",{"_index":1128,"title":{},"content":{"95":{"position":[[61,10]]}},"keywords":{}}],["бизнес",{"_index":380,"title":{},"content":{"33":{"position":[[59,6]]},"34":{"position":[[57,6]]},"54":{"position":[[166,6]]},"67":{"position":[[472,6]]}},"keywords":{}}],["билд",{"_index":25,"title":{},"content":{"2":{"position":[[170,6]]},"4":{"position":[[170,4]]}},"keywords":{}}],["блокир",{"_index":768,"title":{},"content":{"62":{"position":[[1930,9]]},"64":{"position":[[125,9]]},"72":{"position":[[67,12]]}},"keywords":{}}],["блокировк",{"_index":542,"title":{},"content":{"45":{"position":[[97,10]]},"64":{"position":[[336,10]]},"67":{"position":[[336,10]]}},"keywords":{}}],["блокировок",{"_index":358,"title":{},"content":{"32":{"position":[[229,10]]}},"keywords":{}}],["большинств",{"_index":545,"title":{},"content":{"46":{"position":[[62,11]]}},"keywords":{}}],["браузер",{"_index":34,"title":{},"content":{"4":{"position":[[45,9]]},"11":{"position":[[283,8]]},"19":{"position":[[236,8]]},"20":{"position":[[39,8]]}},"keywords":{}}],["бренд",{"_index":128,"title":{},"content":{"11":{"position":[[451,6]]}},"keywords":{}}],["бэкенд",{"_index":342,"title":{"32":{"position":[[36,7]]},"33":{"position":[[17,8]]},"34":{"position":[[17,8]]}},"content":{"34":{"position":[[233,7]]}},"keywords":{}}],["вдохновл",{"_index":338,"title":{"31":{"position":[[0,11]]}},"content":{},"keywords":{}}],["взаимодейств",{"_index":616,"title":{},"content":{"53":{"position":[[133,15]]}},"keywords":{}}],["взрывн",{"_index":896,"title":{},"content":{"72":{"position":[[109,9]]},"73":{"position":[[984,8]]}},"keywords":{}}],["вид",{"_index":741,"title":{},"content":{"58":{"position":[[55,4]]},"70":{"position":[[36,5]]},"71":{"position":[[933,5]]}},"keywords":{}}],["видн",{"_index":389,"title":{},"content":{"33":{"position":[[227,6]]},"73":{"position":[[924,5]]},"78":{"position":[[199,5]]}},"keywords":{}}],["влия",{"_index":798,"title":{},"content":{"64":{"position":[[326,6]]}},"keywords":{}}],["вложен",{"_index":968,"title":{"80":{"position":[[0,9]]}},"content":{"80":{"position":[[86,9],[162,11]]},"82":{"position":[[303,9]]}},"keywords":{}}],["вне",{"_index":1022,"title":{},"content":{"87":{"position":[[18,3]]}},"keywords":{}}],["внутр",{"_index":405,"title":{},"content":{"33":{"position":[[658,6]]},"49":{"position":[[435,6]]},"51":{"position":[[78,6]]},"69":{"position":[[30,6]]}},"keywords":{}}],["возвраща",{"_index":829,"title":{},"content":{"65":{"position":[[106,10]]},"70":{"position":[[18,10]]}},"keywords":{}}],["возможн",{"_index":637,"title":{},"content":{"53":{"position":[[2070,11]]},"56":{"position":[[1175,11]]},"61":{"position":[[932,11]]},"64":{"position":[[984,11]]},"67":{"position":[[364,11]]},"80":{"position":[[138,11]]},"89":{"position":[[1699,11],[2693,11]]},"92":{"position":[[501,11]]}},"keywords":{}}],["возникнет",{"_index":548,"title":{},"content":{"46":{"position":[[206,9]]}},"keywords":{}}],["возраст",{"_index":1024,"title":{},"content":{"89":{"position":[[47,7],[93,9],[157,7],[203,9],[377,8]]},"90":{"position":[[163,8]]},"93":{"position":[[760,10],[1012,7],[1121,7],[1160,7]]}},"keywords":{}}],["вопрос",{"_index":910,"title":{},"content":{"74":{"position":[[40,7]]}},"keywords":{}}],["времен",{"_index":840,"title":{},"content":{"67":{"position":[[274,9]]}},"keywords":{}}],["врод",{"_index":885,"title":{},"content":{"71":{"position":[[1373,5]]}},"keywords":{}}],["вход",{"_index":800,"title":{},"content":{"64":{"position":[[522,4]]}},"keywords":{}}],["входн",{"_index":615,"title":{},"content":{"53":{"position":[[43,7]]}},"keywords":{}}],["выбра",{"_index":761,"title":{},"content":{"62":{"position":[[1467,6]]}},"keywords":{}}],["вывод",{"_index":977,"title":{},"content":{"82":{"position":[[220,5]]}},"keywords":{}}],["выделя",{"_index":835,"title":{"67":{"position":[[4,8]]}},"content":{},"keywords":{}}],["выз",{"_index":760,"title":{},"content":{"62":{"position":[[1368,5]]},"92":{"position":[[2840,5],[4405,5],[4979,5]]},"93":{"position":[[174,5]]}},"keywords":{}}],["вызва",{"_index":510,"title":{},"content":{"43":{"position":[[916,7]]},"61":{"position":[[669,6]]},"92":{"position":[[3857,7]]}},"keywords":{}}],["вызов",{"_index":758,"title":{},"content":{"62":{"position":[[1325,6]]},"92":{"position":[[1376,7]]}},"keywords":{}}],["вызовет",{"_index":755,"title":{},"content":{"62":{"position":[[58,7]]}},"keywords":{}}],["вызыва",{"_index":764,"title":{"78":{"position":[[6,10]]}},"content":{"62":{"position":[[1632,8],[1847,10]]},"63":{"position":[[41,8]]},"64":{"position":[[42,10]]},"78":{"position":[[20,10]]},"80":{"position":[[116,8]]},"92":{"position":[[2773,8]]}},"keywords":{}}],["выполнен",{"_index":120,"title":{},"content":{"11":{"position":[[296,10]]},"17":{"position":[[191,10]]},"92":{"position":[[2738,10]]}},"keywords":{}}],["выполнениясниз",{"_index":310,"title":{},"content":{"20":{"position":[[181,17]]}},"keywords":{}}],["выполня",{"_index":196,"title":{},"content":{"15":{"position":[[99,10]]},"17":{"position":[[772,9]]},"73":{"position":[[1558,9]]}},"keywords":{}}],["вырастет",{"_index":184,"title":{},"content":{"13":{"position":[[994,8]]}},"keywords":{}}],["высок",{"_index":563,"title":{},"content":{"46":{"position":[[673,8]]}},"keywords":{}}],["вычисл",{"_index":1040,"title":{},"content":{"90":{"position":[[47,9],[141,9]]}},"keywords":{}}],["вычислен",{"_index":390,"title":{"75":{"position":[[20,10]]}},"content":{"33":{"position":[[242,10]]},"89":{"position":[[1149,10]]},"94":{"position":[[1314,10],[2091,10]]}},"keywords":{}}],["вычисля",{"_index":556,"title":{},"content":{"46":{"position":[[400,9]]},"75":{"position":[[22,9]]}},"keywords":{}}],["гарантирова",{"_index":308,"title":{},"content":{"20":{"position":[[140,14]]}},"keywords":{}}],["генерац",{"_index":143,"title":{"12":{"position":[[0,9]]},"13":{"position":[[0,9]]},"15":{"position":[[0,9]]},"17":{"position":[[0,9]]}},"content":{"13":{"position":[[767,9]]}},"keywords":{}}],["генерирова",{"_index":70,"title":{},"content":{"6":{"position":[[73,12]]},"12":{"position":[[123,12]]},"18":{"position":[[179,14]]}},"keywords":{}}],["готов",{"_index":466,"title":{"39":{"position":[[0,7]]}},"content":{},"keywords":{}}],["группировкапр",{"_index":1098,"title":{},"content":{"93":{"position":[[103,14]]}},"keywords":{}}],["дал",{"_index":867,"title":{},"content":{"70":{"position":[[269,6]]},"89":{"position":[[1072,5]]}},"keywords":{}}],["дальн",{"_index":609,"title":{},"content":{"52":{"position":[[691,10]]}},"keywords":{}}],["дан",{"_index":10,"title":{"28":{"position":[[11,7]]},"59":{"position":[[11,6]]},"60":{"position":[[30,6]]},"62":{"position":[[40,6]]},"65":{"position":[[28,7]]}},"content":{"1":{"position":[[59,6]]},"20":{"position":[[117,7]]},"38":{"position":[[236,6]]},"39":{"position":[[112,6]]},"46":{"position":[[92,8],[742,6]]},"47":{"position":[[169,6],[343,6],[480,6]]},"52":{"position":[[820,6]]},"53":{"position":[[1211,6],[1487,6],[2110,6]]},"57":{"position":[[708,6],[1101,6]]},"58":{"position":[[83,7]]},"60":{"position":[[43,7]]},"61":{"position":[[64,6],[167,7]]},"62":{"position":[[77,6],[722,6],[998,6],[1204,6],[1459,6],[1523,6],[1618,7],[1711,7],[1879,6]]},"63":{"position":[[779,6]]},"64":{"position":[[74,6],[223,6],[304,6],[527,7],[1340,6]]},"65":{"position":[[77,7]]},"67":{"position":[[126,6],[228,6]]},"68":{"position":[[125,6],[397,6],[630,6],[824,6]]},"73":{"position":[[104,6]]},"80":{"position":[[180,6]]},"82":{"position":[[1293,6]]},"93":{"position":[[741,6]]}},"keywords":{}}],["дат",{"_index":1013,"title":{},"content":{"84":{"position":[[900,4]]},"93":{"position":[[973,4]]}},"keywords":{}}],["дебагингаувеличен",{"_index":640,"title":{},"content":{"53":{"position":[[2184,19]]}},"keywords":{}}],["действ",{"_index":239,"title":{},"content":{"17":{"position":[[792,9]]},"33":{"position":[[808,9]]},"43":{"position":[[660,9]]},"69":{"position":[[917,9]]},"71":{"position":[[606,9]]},"73":{"position":[[1189,9],[1580,9]]},"74":{"position":[[125,9]]}},"keywords":{}}],["декомпозиц",{"_index":713,"title":{},"content":{"57":{"position":[[183,12]]}},"keywords":{}}],["дела",{"_index":112,"title":{},"content":{"11":{"position":[[173,6],[656,6]]},"12":{"position":[[67,6]]},"13":{"position":[[755,6]]},"20":{"position":[[77,6]]},"82":{"position":[[213,6]]},"95":{"position":[[696,6],[1099,6]]}},"keywords":{}}],["дефолтн",{"_index":1001,"title":{"83":{"position":[[10,9]]}},"content":{"83":{"position":[[41,9]]},"84":{"position":[[390,9]]}},"keywords":{}}],["динамическ",{"_index":95,"title":{"9":{"position":[[13,12]]}},"content":{"18":{"position":[[228,12]]},"20":{"position":[[223,12]]}},"keywords":{}}],["директор",{"_index":201,"title":{},"content":{"15":{"position":[[220,10],[316,10]]},"49":{"position":[[26,10]]},"86":{"position":[[25,10]]}},"keywords":{}}],["директориязаменя",{"_index":206,"title":{},"content":{"15":{"position":[[393,18]]}},"keywords":{}}],["добав",{"_index":183,"title":{},"content":{"13":{"position":[[963,8]]},"17":{"position":[[174,8]]},"18":{"position":[[420,8]]},"33":{"position":[[423,8]]},"34":{"position":[[375,8]]},"43":{"position":[[2003,9]]},"56":{"position":[[35,8],[141,8],[1187,8],[2658,9]]},"61":{"position":[[944,8]]},"68":{"position":[[479,8]]},"92":{"position":[[513,8]]},"94":{"position":[[1359,9]]}},"keywords":{}}],["добавл",{"_index":154,"title":{},"content":{"13":{"position":[[149,8]]},"56":{"position":[[2289,9]]},"94":{"position":[[559,9],[664,9],[1771,11]]},"95":{"position":[[649,11],[950,9]]}},"keywords":{}}],["добавлен",{"_index":85,"title":{},"content":{"8":{"position":[[49,10]]},"56":{"position":[[338,11]]},"68":{"position":[[315,11]]},"92":{"position":[[1846,10],[2482,12],[2571,12]]}},"keywords":{}}],["добавля",{"_index":925,"title":{},"content":{"75":{"position":[[41,11]]}},"keywords":{}}],["документ",{"_index":410,"title":{},"content":{"33":{"position":[[821,11]]},"43":{"position":[[22,9],[2013,8]]},"47":{"position":[[204,10],[489,11]]}},"keywords":{}}],["документ"",{"_index":384,"title":{},"content":{"33":{"position":[[99,14]]},"34":{"position":[[97,14]]},"47":{"position":[[35,14]]},"68":{"position":[[22,14],[244,14],[523,14],[684,14]]},"73":{"position":[[22,14]]}},"keywords":{}}],["документац",{"_index":13,"title":{},"content":{"1":{"position":[[131,13]]},"7":{"position":[[50,13]]},"8":{"position":[[32,12]]},"39":{"position":[[119,13]]}},"keywords":{}}],["долж",{"_index":149,"title":{"72":{"position":[[14,6]]}},"content":{"13":{"position":[[15,6],[137,6]]},"41":{"position":[[160,6]]},"52":{"position":[[283,6]]},"56":{"position":[[586,6]]},"58":{"position":[[20,6]]},"61":{"position":[[215,6]]},"62":{"position":[[18,6]]},"67":{"position":[[94,6]]},"69":{"position":[[369,6]]},"72":{"position":[[15,6]]},"78":{"position":[[13,6]]},"92":{"position":[[4023,6],[4426,6],[5000,6]]}},"keywords":{}}],["должн",{"_index":8,"title":{},"content":{"1":{"position":[[43,6]]},"7":{"position":[[64,6]]},"46":{"position":[[419,6],[571,6]]},"51":{"position":[[160,6]]},"54":{"position":[[13,6]]},"56":{"position":[[255,6]]},"57":{"position":[[223,6]]},"58":{"position":[[114,6]]},"62":{"position":[[1765,6],[1895,6]]},"64":{"position":[[90,6]]},"78":{"position":[[55,6]]},"82":{"position":[[56,6]]},"89":{"position":[[329,6]]}},"keywords":{}}],["дополнительн",{"_index":368,"title":{},"content":{"32":{"position":[[391,14]]},"33":{"position":[[347,13],[441,14]]},"34":{"position":[[421,14]]},"57":{"position":[[158,14],[486,14]]}},"keywords":{}}],["допустим",{"_index":1097,"title":{},"content":{"93":{"position":[[93,9],[1050,13],[1182,13]]}},"keywords":{}}],["доск",{"_index":90,"title":{},"content":{"8":{"position":[[91,5]]}},"keywords":{}}],["доста",{"_index":240,"title":{},"content":{"17":{"position":[[803,7]]}},"keywords":{}}],["достаточн",{"_index":55,"title":{},"content":{"5":{"position":[[46,10]]}},"keywords":{}}],["достиг",{"_index":652,"title":{},"content":{"56":{"position":[[324,6]]}},"keywords":{}}],["достигнут",{"_index":685,"title":{},"content":{"56":{"position":[[2567,11]]},"92":{"position":[[2536,10]]},"94":{"position":[[1155,11]]}},"keywords":{}}],["достич",{"_index":935,"title":{},"content":{"78":{"position":[[142,7]]}},"keywords":{}}],["доступ",{"_index":234,"title":{"46":{"position":[[28,8]]},"48":{"position":[[19,8]]},"53":{"position":[[0,6]]},"55":{"position":[[26,7]]},"59":{"position":[[22,8]]},"60":{"position":[[47,9]]},"66":{"position":[[13,8]]},"75":{"position":[[31,9]]},"76":{"position":[[14,7]]},"83":{"position":[[36,8]]},"85":{"position":[[32,8]]},"91":{"position":[[22,8]]}},"content":{"17":{"position":[[598,6]]},"19":{"position":[[245,6]]},"32":{"position":[[173,9],[240,8],[432,9],[512,7]]},"33":{"position":[[253,7],[531,8],[798,7]]},"34":{"position":[[412,8]]},"36":{"position":[[46,8],[206,9],[245,8],[323,6]]},"37":{"position":[[81,8]]},"38":{"position":[[46,8],[89,8],[138,10]]},"43":{"position":[[651,6],[826,7]]},"46":{"position":[[10,8],[50,9],[165,7],[410,8],[533,7],[562,8],[599,10],[774,8]]},"47":{"position":[[261,6],[396,6],[617,7]]},"52":{"position":[[856,8]]},"53":{"position":[[97,9],[817,7],[1179,7],[1235,8],[1511,8]]},"54":{"position":[[217,9]]},"57":{"position":[[624,7],[732,7],[1001,7],[1125,7]]},"61":{"position":[[32,7]]},"62":{"position":[[328,7],[690,7],[746,8],[1022,8],[1756,8]]},"67":{"position":[[385,7]]},"68":{"position":[[147,6],[419,6]]},"69":{"position":[[908,6],[1104,6],[1142,6]]},"70":{"position":[[106,7]]},"71":{"position":[[597,6],[895,8],[1415,8],[1494,8]]},"73":{"position":[[1009,9],[1020,6],[1180,6]]},"74":{"position":[[109,6]]},"75":{"position":[[32,8]]},"78":{"position":[[76,10],[222,9]]},"84":{"position":[[260,7],[358,6]]},"89":{"position":[[1160,9]]},"90":{"position":[[67,7]]},"92":{"position":[[3885,7],[3938,8]]},"93":{"position":[[140,7]]},"94":{"position":[[234,8],[757,7],[1325,7],[1848,7],[2102,9]]},"95":{"position":[[1027,7]]}},"keywords":{}}],["доступа"",{"_index":1017,"title":{},"content":{"84":{"position":[[973,13]]}},"keywords":{}}],["доступахлогик",{"_index":541,"title":{},"content":{"45":{"position":[[82,14]]}},"keywords":{}}],["доступеподход",{"_index":459,"title":{},"content":{"38":{"position":[[213,13]]}},"keywords":{}}],["доступн",{"_index":33,"title":{},"content":{"4":{"position":[[33,9]]},"11":{"position":[[272,8]]},"33":{"position":[[114,8]]},"34":{"position":[[112,8]]},"36":{"position":[[377,11]]},"43":{"position":[[32,8],[1751,9]]},"45":{"position":[[34,9]]},"47":{"position":[[50,8],[139,8]]},"56":{"position":[[100,9]]},"68":{"position":[[37,8],[259,8]]},"78":{"position":[[272,9]]},"82":{"position":[[68,8],[226,8]]},"89":{"position":[[26,8],[82,10],[136,8],[192,10]]},"90":{"position":[[151,11]]},"92":{"position":[[1507,8],[2014,9]]},"93":{"position":[[750,9],[1111,9]]},"95":{"position":[[717,9]]}},"keywords":{}}],["доступовзакрыт",{"_index":460,"title":{},"content":{"38":{"position":[[260,16]]}},"keywords":{}}],["доступовимет",{"_index":441,"title":{},"content":{"37":{"position":[[41,13]]}},"keywords":{}}],["доступовпричин",{"_index":540,"title":{},"content":{"45":{"position":[[57,15]]}},"keywords":{}}],["доступовтип",{"_index":539,"title":{},"content":{"45":{"position":[[21,12]]}},"keywords":{}}],["друг",{"_index":463,"title":{},"content":{"38":{"position":[[324,7]]},"54":{"position":[[29,4],[37,5]]},"56":{"position":[[1751,7]]},"61":{"position":[[691,7]]}},"keywords":{}}],["един",{"_index":68,"title":{"44":{"position":[[0,6]]},"53":{"position":[[25,6]]}},"content":{"6":{"position":[[51,6]]},"34":{"position":[[386,6]]},"37":{"position":[[55,6]]},"53":{"position":[[36,6]]},"62":{"position":[[1433,7],[1495,7]]},"82":{"position":[[392,6]]}},"keywords":{}}],["заблокирова",{"_index":848,"title":{},"content":{"68":{"position":[[538,13],[747,13],[875,14]]}},"keywords":{}}],["завис",{"_index":850,"title":{},"content":{"68":{"position":[[619,7]]},"81":{"position":[[148,7]]}},"keywords":{}}],["зависет",{"_index":365,"title":{"72":{"position":[[21,8]]}},"content":{"32":{"position":[[352,8]]},"54":{"position":[[20,8]]},"72":{"position":[[31,8]]}},"keywords":{}}],["зависим",{"_index":246,"title":{},"content":{"18":{"position":[[3,11]]},"47":{"position":[[523,11]]},"72":{"position":[[80,11]]}},"keywords":{}}],["загруж",{"_index":828,"title":{},"content":{"65":{"position":[[67,9]]}},"keywords":{}}],["загружа",{"_index":71,"title":{},"content":{"6":{"position":[[88,9]]}},"keywords":{}}],["загрузк",{"_index":313,"title":{},"content":{"20":{"position":[[214,8]]},"38":{"position":[[227,8]]},"62":{"position":[[1514,8],[1609,8],[1702,8]]}},"keywords":{}}],["закр",{"_index":915,"title":{},"content":{"74":{"position":[[116,6],[180,6],[229,6]]},"79":{"position":[[12,7]]},"80":{"position":[[150,7]]}},"keywords":{}}],["закрыва",{"_index":433,"title":{},"content":{"36":{"position":[[313,9]]},"73":{"position":[[1170,9]]},"81":{"position":[[90,9]]},"82":{"position":[[1393,9]]},"84":{"position":[[348,9]]}},"keywords":{}}],["занов",{"_index":121,"title":{},"content":{"11":{"position":[[360,6]]},"12":{"position":[[60,6]]}},"keywords":{}}],["заполн",{"_index":1012,"title":{},"content":{"84":{"position":[[890,9]]},"93":{"position":[[963,9]]}},"keywords":{}}],["запрашива",{"_index":795,"title":{},"content":{"64":{"position":[[209,13]]}},"keywords":{}}],["запреща",{"_index":861,"title":{},"content":{"69":{"position":[[1132,9]]}},"keywords":{}}],["запрос",{"_index":511,"title":{},"content":{"43":{"position":[[931,7]]},"60":{"position":[[82,9]]},"62":{"position":[[1828,10]]},"64":{"position":[[23,10],[158,7],[372,7]]}},"keywords":{}}],["запуск",{"_index":108,"title":{},"content":{"11":{"position":[[97,7],[685,7]]},"12":{"position":[[97,7]]},"13":{"position":[[364,7],[388,7],[574,7]]},"15":{"position":[[79,8]]},"17":{"position":[[18,7],[214,7]]},"18":{"position":[[100,7],[840,7],[980,7]]}},"keywords":{}}],["запуска",{"_index":43,"title":{},"content":{"4":{"position":[[160,9]]},"17":{"position":[[55,9],[532,9]]},"62":{"position":[[1358,9]]}},"keywords":{}}],["запута",{"_index":647,"title":{},"content":{"54":{"position":[[186,10]]}},"keywords":{}}],["затрат",{"_index":312,"title":{},"content":{"20":{"position":[[203,7]]},"37":{"position":[[11,7]]}},"keywords":{}}],["зацепл",{"_index":578,"title":{},"content":{"47":{"position":[[748,9]]}},"keywords":{}}],["зацеплен",{"_index":550,"title":{"47":{"position":[[23,12]]}},"content":{"46":{"position":[[230,10],[498,10],[682,10]]},"47":{"position":[[226,11],[537,10],[577,10]]}},"keywords":{}}],["зацеплениеправ",{"_index":555,"title":{},"content":{"46":{"position":[[369,18]]}},"keywords":{}}],["защищ",{"_index":933,"title":{},"content":{"78":{"position":[[67,8]]}},"keywords":{}}],["здесьзапуска",{"_index":244,"title":{},"content":{"17":{"position":[[1126,14]]}},"keywords":{}}],["злоумышленник",{"_index":35,"title":{},"content":{"4":{"position":[[58,14]]}},"keywords":{}}],["знает",{"_index":274,"title":{},"content":{"18":{"position":[[586,5]]}},"keywords":{}}],["знан",{"_index":392,"title":{},"content":{"33":{"position":[[286,6]]}},"keywords":{}}],["значен",{"_index":115,"title":{},"content":{"11":{"position":[[217,8],[336,8]]},"13":{"position":[[436,8]]},"17":{"position":[[1092,9]]},"18":{"position":[[916,8]]}},"keywords":{}}],["значительн",{"_index":797,"title":{},"content":{"64":{"position":[[311,11]]},"78":{"position":[[309,11]]}},"keywords":{}}],["избега",{"_index":872,"title":{},"content":{"71":{"position":[[875,8]]}},"keywords":{}}],["избежа",{"_index":560,"title":{},"content":{"46":{"position":[[489,8]]},"92":{"position":[[5422,8]]}},"keywords":{}}],["измен",{"_index":846,"title":{},"content":{"68":{"position":[[188,8]]}},"keywords":{}}],["изменен",{"_index":84,"title":{},"content":{"8":{"position":[[22,9]]},"11":{"position":[[326,9]]},"12":{"position":[[20,9]]},"13":{"position":[[721,10]]},"67":{"position":[[218,9],[403,9]]}},"keywords":{}}],["изменя",{"_index":247,"title":{},"content":{"18":{"position":[[38,10]]}},"keywords":{}}],["именован",{"_index":60,"title":{},"content":{"5":{"position":[[105,11]]}},"keywords":{}}],["имеют",{"_index":1039,"title":{},"content":{"90":{"position":[[11,5]]}},"keywords":{}}],["имплементац",{"_index":587,"title":{},"content":{"49":{"position":[[386,13]]},"87":{"position":[[59,13]]}},"keywords":{}}],["имплементирова",{"_index":362,"title":{},"content":{"32":{"position":[[309,18]]}},"keywords":{}}],["импорт",{"_index":642,"title":{},"content":{"53":{"position":[[2236,7]]},"56":{"position":[[1740,7]]}},"keywords":{}}],["импортир",{"_index":573,"title":{},"content":{"47":{"position":[[288,11],[433,11]]}},"keywords":{}}],["импортиру",{"_index":577,"title":{},"content":{"47":{"position":[[660,10]]}},"keywords":{}}],["инжектир",{"_index":211,"title":{},"content":{"17":{"position":[[116,11]]}},"keywords":{}}],["инжектирова",{"_index":146,"title":{},"content":{"12":{"position":[[149,13]]}},"keywords":{}}],["интерфейс",{"_index":361,"title":{},"content":{"32":{"position":[[279,11]]}},"keywords":{}}],["информац",{"_index":40,"title":{},"content":{"4":{"position":[[127,10]]},"53":{"position":[[84,10]]}},"keywords":{}}],["информацион",{"_index":1113,"title":{},"content":{"94":{"position":[[507,14],[1719,14]]},"95":{"position":[[597,14]]}},"keywords":{}}],["использ",{"_index":18,"title":{"94":{"position":[[22,13]]}},"content":{"2":{"position":[[34,12]]},"13":{"position":[[790,12],[824,12],[877,12]]},"39":{"position":[[88,12]]},"62":{"position":[[1743,12]]},"89":{"position":[[1116,10]]},"94":{"position":[[32,10]]}},"keywords":{}}],["использова",{"_index":20,"title":{"41":{"position":[[18,12]]}},"content":{"2":{"position":[[69,12]]},"5":{"position":[[171,12]]},"7":{"position":[[76,12]]},"18":{"position":[[963,12]]},"32":{"position":[[493,12]]},"33":{"position":[[738,14]]},"41":{"position":[[19,12],[167,14]]},"46":{"position":[[306,12],[578,14]]},"54":{"position":[[292,12]]},"56":{"position":[[1777,12]]},"64":{"position":[[172,14],[486,12],[1401,12]]},"95":{"position":[[36,12]]}},"keywords":{}}],["использован",{"_index":27,"title":{"3":{"position":[[14,13]]},"19":{"position":[[0,13]]},"26":{"position":[[0,13]]},"27":{"position":[[0,13]]},"30":{"position":[[0,13]]},"52":{"position":[[18,14]]},"56":{"position":[[7,14]]},"63":{"position":[[0,14]]},"71":{"position":[[20,13]]}},"content":{"19":{"position":[[5,13]]},"33":{"position":[[606,13]]},"53":{"position":[[1791,14]]},"62":{"position":[[1419,13],[1481,13],[1580,13]]},"64":{"position":[[409,13]]},"65":{"position":[[12,14],[362,13]]},"71":{"position":[[1347,13]]},"78":{"position":[[233,13]]},"80":{"position":[[1,13]]}},"keywords":{}}],["исследован",{"_index":937,"title":{},"content":{"78":{"position":[[174,12]]}},"keywords":{}}],["итогов",{"_index":180,"title":{},"content":{"13":{"position":[[917,8]]}},"keywords":{}}],["кажд",{"_index":127,"title":{"78":{"position":[[21,6]]}},"content":{"11":{"position":[[443,7]]},"15":{"position":[[72,6]]},"58":{"position":[[5,7]]},"62":{"position":[[86,6],[1276,7],[1374,6],[1393,7],[1645,6],[1667,7]]},"78":{"position":[[34,6],[119,7]]},"80":{"position":[[31,6],[79,6]]},"92":{"position":[[1077,7],[1249,7]]}},"keywords":{}}],["как",{"_index":748,"title":{"60":{"position":[[24,5]]}},"content":{},"keywords":{}}],["кастомизац",{"_index":62,"title":{},"content":{"5":{"position":[[198,12]]}},"keywords":{}}],["кейс",{"_index":1056,"title":{},"content":{"92":{"position":[[1320,6],[1341,6],[1501,5],[1674,5],[1802,5],[2008,5],[2132,6],[3982,4],[4459,7],[4947,4],[5453,7]]},"93":{"position":[[215,6]]},"94":{"position":[[490,5],[704,5],[933,5],[1228,5],[1609,6]]}},"keywords":{}}],["классическ",{"_index":103,"title":{},"content":{"11":{"position":[[34,12]]}},"keywords":{}}],["клиент",{"_index":341,"title":{"32":{"position":[[3,7]]}},"content":{"32":{"position":[[462,7]]},"36":{"position":[[237,7],[274,7]]}},"keywords":{}}],["клиентеapi",{"_index":424,"title":{},"content":{"36":{"position":[[91,10]]}},"keywords":{}}],["клиентесист",{"_index":453,"title":{},"content":{"38":{"position":[[58,14]]}},"keywords":{}}],["клиентск",{"_index":419,"title":{},"content":{"34":{"position":[[393,10]]}},"keywords":{}}],["книг",{"_index":648,"title":{},"content":{"56":{"position":[[44,5],[121,5],[350,4],[443,4],[1205,5],[2603,4],[2668,5]]},"61":{"position":[[962,5]]},"64":{"position":[[2209,5]]},"71":{"position":[[1287,5],[2151,5]]},"74":{"position":[[196,5]]},"82":{"position":[[31,5],[269,6]]},"89":{"position":[[20,5],[2715,5]]},"92":{"position":[[531,5],[1208,5],[2084,4],[2201,5],[2678,4],[3662,5],[5133,4]]},"94":{"position":[[540,5],[1191,4],[1369,5],[1676,5],[1752,5]]},"95":{"position":[[338,5],[630,5]]}},"keywords":{}}],["книгепокупк",{"_index":1025,"title":{},"content":{"89":{"position":[[116,12]]}},"keywords":{}}],["книгу"",{"_index":868,"title":{},"content":{"71":{"position":[[34,11]]}},"keywords":{}}],["кнопк",{"_index":382,"title":{},"content":{"33":{"position":[[78,6],[434,6]]},"34":{"position":[[76,6],[357,7]]},"47":{"position":[[13,6]]},"56":{"position":[[218,6]]},"68":{"position":[[1,6],[217,6],[502,6],[663,6],[846,6]]},"71":{"position":[[13,6]]},"73":{"position":[[1,6],[157,7]]}},"keywords":{}}],["кнопкедоступ",{"_index":906,"title":{},"content":{"73":{"position":[[1029,12]]}},"keywords":{}}],["код",{"_index":118,"title":{},"content":{"11":{"position":[[247,4]]},"18":{"position":[[457,3]]},"20":{"position":[[125,3]]},"52":{"position":[[278,4]]},"53":{"position":[[392,4]]},"56":{"position":[[581,4],[1731,4]]},"57":{"position":[[566,5]]},"61":{"position":[[210,4]]},"62":{"position":[[116,4]]},"67":{"position":[[446,5]]},"69":{"position":[[364,4]]},"72":{"position":[[173,5]]},"78":{"position":[[341,4]]},"89":{"position":[[559,4]]},"92":{"position":[[1399,5],[5052,5]]}},"keywords":{}}],["количеств",{"_index":135,"title":{},"content":{"11":{"position":[[551,10]]},"56":{"position":[[110,10],[432,10],[2592,10]]},"92":{"position":[[1835,10],[2073,10],[2471,10],[2560,10],[2667,10],[5122,10],[5437,10]]},"94":{"position":[[1006,10],[1180,10],[1970,10]]}},"keywords":{}}],["команд",{"_index":162,"title":{},"content":{"13":{"position":[[376,7]]},"17":{"position":[[183,7]]}},"keywords":{}}],["комментар",{"_index":740,"title":{},"content":{"58":{"position":[[41,11]]}},"keywords":{}}],["компан",{"_index":178,"title":{},"content":{"13":{"position":[[868,8]]}},"keywords":{}}],["компаниицентрализова",{"_index":442,"title":{},"content":{"37":{"position":[[110,23]]}},"keywords":{}}],["компонент",{"_index":875,"title":{},"content":{"71":{"position":[[922,10],[1361,11]]},"84":{"position":[[218,9]]}},"keywords":{}}],["конкретн",{"_index":458,"title":{},"content":{"38":{"position":[[185,10]]},"46":{"position":[[183,11]]},"65":{"position":[[126,10]]},"69":{"position":[[1151,10]]},"73":{"position":[[146,10]]},"81":{"position":[[100,10]]},"84":{"position":[[232,10]]}},"keywords":{}}],["контейнер",{"_index":142,"title":{},"content":{"11":{"position":[[700,11]]},"12":{"position":[[112,10]]},"13":{"position":[[403,10],[933,10]]},"17":{"position":[[33,10],[222,11],[542,9]]}},"keywords":{}}],["контекст",{"_index":359,"title":{},"content":{"32":{"position":[[251,9]]}},"keywords":{}}],["контрол",{"_index":402,"title":{},"content":{"33":{"position":[[575,9]]},"46":{"position":[[1,8]]}},"keywords":{}}],["конфиг",{"_index":255,"title":{},"content":{"18":{"position":[[249,7]]}},"keywords":{}}],["конфигурац",{"_index":939,"title":{},"content":{"78":{"position":[[247,12]]}},"keywords":{}}],["концентрац",{"_index":543,"title":{"46":{"position":[[8,12]]}},"content":{},"keywords":{}}],["концептуальн",{"_index":347,"title":{},"content":{"32":{"position":[[39,13]]},"51":{"position":[[244,13],[354,13]]}},"keywords":{}}],["концепц",{"_index":890,"title":{},"content":{"71":{"position":[[1471,10]]}},"keywords":{}}],["коп",{"_index":204,"title":{},"content":{"15":{"position":[[264,6]]},"17":{"position":[[892,6]]}},"keywords":{}}],["копирован",{"_index":278,"title":{},"content":{"18":{"position":[[696,11]]}},"keywords":{}}],["корен",{"_index":205,"title":{},"content":{"15":{"position":[[353,6]]}},"keywords":{}}],["котор",{"_index":42,"title":{},"content":{"4":{"position":[[152,7]]},"56":{"position":[[127,7]]}},"keywords":{}}],["куп",{"_index":827,"title":{},"content":{"64":{"position":[[2201,7]]}},"keywords":{}}],["либ",{"_index":89,"title":{},"content":{"8":{"position":[[83,4],[114,4]]},"11":{"position":[[168,4]]},"36":{"position":[[33,4]]}},"keywords":{}}],["лк"",{"_index":1015,"title":{},"content":{"84":{"position":[[916,8]]}},"keywords":{}}],["логик",{"_index":399,"title":{"46":{"position":[[21,6]]},"54":{"position":[[18,6]]},"85":{"position":[[25,6]]}},"content":{"33":{"position":[[524,6]]},"34":{"position":[[436,6]]},"43":{"position":[[924,6]]},"45":{"position":[[1,6]]},"46":{"position":[[543,6],[655,6]]},"47":{"position":[[300,6],[445,6],[671,6]]},"54":{"position":[[197,6],[276,7]]},"71":{"position":[[1408,6]]},"89":{"position":[[361,6]]},"94":{"position":[[76,6]]}},"keywords":{}}],["логирован",{"_index":639,"title":{},"content":{"53":{"position":[[2168,11]]}},"keywords":{}}],["люб",{"_index":432,"title":{},"content":{"36":{"position":[[304,8]]}},"keywords":{}}],["максимальн",{"_index":657,"title":{},"content":{"56":{"position":[[419,12],[2579,12]]},"92":{"position":[[2060,12],[2547,12],[2654,12],[5109,12]]},"94":{"position":[[993,12],[1167,12],[1957,12]]}},"keywords":{}}],["медлен",{"_index":767,"title":{},"content":{"62":{"position":[[1907,10]]},"64":{"position":[[102,10]]}},"keywords":{}}],["меня",{"_index":249,"title":{},"content":{"18":{"position":[[88,7]]}},"keywords":{}}],["мест",{"_index":834,"title":{},"content":{"65":{"position":[[356,5]]}},"keywords":{}}],["местоположен",{"_index":580,"title":{"49":{"position":[[0,15]]},"77":{"position":[[0,15]]},"86":{"position":[[0,15]]}},"content":{},"keywords":{}}],["метод",{"_index":611,"title":{"75":{"position":[[8,7]]}},"content":{"52":{"position":[[799,5]]},"60":{"position":[[26,5]]},"62":{"position":[[31,5],[1291,5],[1441,6],[1503,6],[1696,5],[1860,7]]},"64":{"position":[[55,7],[499,7]]},"69":{"position":[[54,6]]},"75":{"position":[[5,8]]}},"keywords":{}}],["механизм",{"_index":21,"title":{},"content":{"2":{"position":[[86,8]]}},"keywords":{}}],["мним",{"_index":552,"title":{},"content":{"46":{"position":[[264,5]]}},"keywords":{}}],["модалк",{"_index":532,"title":{},"content":{"43":{"position":[[1902,7]]},"56":{"position":[[272,7]]},"73":{"position":[[1057,7]]},"94":{"position":[[720,7],[1811,7]]},"95":{"position":[[990,7]]}},"keywords":{}}],["модельюapi",{"_index":428,"title":{},"content":{"36":{"position":[[170,10]]}},"keywords":{}}],["модул",{"_index":538,"title":{"45":{"position":[[19,7]]},"46":{"position":[[45,7]]},"51":{"position":[[28,8]]},"87":{"position":[[26,6]]}},"content":{"46":{"position":[[139,8],[195,7],[291,8],[328,8],[473,6]]},"47":{"position":[[239,6],[310,6],[366,6],[455,6],[554,9],[589,6],[681,7],[711,6]]},"51":{"position":[[270,6],[380,6]]},"53":{"position":[[115,6]]},"56":{"position":[[1759,6]]},"57":{"position":[[878,7]]},"78":{"position":[[290,6]]},"87":{"position":[[34,6]]}},"keywords":{}}],["модулейпричин",{"_index":561,"title":{},"content":{"46":{"position":[[509,14]]}},"keywords":{}}],["модулямидоступ",{"_index":551,"title":{},"content":{"46":{"position":[[247,16]]}},"keywords":{}}],["может",{"_index":345,"title":{},"content":{"32":{"position":[[18,6]]}},"keywords":{}}],["мок",{"_index":1126,"title":{"95":{"position":[[0,3]]}},"content":{},"keywords":{}}],["молод",{"_index":826,"title":{},"content":{"64":{"position":[[2155,9]]}},"keywords":{}}],["момент",{"_index":978,"title":{},"content":{"82":{"position":[[280,6]]}},"keywords":{}}],["мотивац",{"_index":30,"title":{"4":{"position":[[0,10]]}},"content":{"53":{"position":[[2059,9]]},"62":{"position":[[1409,9]]},"92":{"position":[[5401,9]]}},"keywords":{}}],["мотивациявыз",{"_index":934,"title":{},"content":{"78":{"position":[[88,14]]}},"keywords":{}}],["нажат",{"_index":418,"title":{},"content":{"34":{"position":[[341,7]]},"56":{"position":[[207,7]]}},"keywords":{}}],["назван",{"_index":592,"title":{},"content":{"51":{"position":[[183,8]]},"74":{"position":[[1,8]]}},"keywords":{}}],["найдена"",{"_index":962,"title":{},"content":{"79":{"position":[[1034,13]]}},"keywords":{}}],["найт",{"_index":36,"title":{},"content":{"4":{"position":[[79,5]]}},"keywords":{}}],["налич",{"_index":407,"title":{},"content":{"33":{"position":[[701,7]]}},"keywords":{}}],["например",{"_index":464,"title":{},"content":{"38":{"position":[[343,9]]},"43":{"position":[[1871,9]]}},"keywords":{}}],["напрям",{"_index":373,"title":{"51":{"position":[[9,8]]}},"content":{"32":{"position":[[535,8]]},"72":{"position":[[22,8]]}},"keywords":{}}],["наруша",{"_index":888,"title":{},"content":{"71":{"position":[[1448,8]]}},"keywords":{}}],["настоя",{"_index":252,"title":{},"content":{"18":{"position":[[198,9]]}},"keywords":{}}],["наход",{"_index":150,"title":{},"content":{"13":{"position":[[22,10]]},"49":{"position":[[14,9],[425,9]]},"86":{"position":[[13,9]]}},"keywords":{}}],["начал",{"_index":1066,"title":{},"content":{"92":{"position":[[2730,7]]}},"keywords":{}}],["наш",{"_index":734,"title":{},"content":{"57":{"position":[[871,6]]}},"keywords":{}}],["небольш",{"_index":969,"title":{},"content":{"80":{"position":[[55,9]]}},"keywords":{}}],["неверн",{"_index":395,"title":{},"content":{"33":{"position":[[405,8]]}},"keywords":{}}],["недостаточн",{"_index":729,"title":{},"content":{"57":{"position":[[695,12],[1088,12]]}},"keywords":{}}],["недоступн",{"_index":1021,"title":{},"content":{"87":{"position":[[7,10]]},"92":{"position":[[1680,11],[1808,11],[3899,11],[3987,11]]},"95":{"position":[[1120,11]]}},"keywords":{}}],["нежелательн",{"_index":549,"title":{"47":{"position":[[9,13]]}},"content":{"46":{"position":[[216,13],[355,13]]}},"keywords":{}}],["нейминг",{"_index":909,"title":{"74":{"position":[[0,8]]},"75":{"position":[[0,7]]},"90":{"position":[[0,8]]}},"content":{},"keywords":{}}],["необходим",{"_index":19,"title":{"36":{"position":[[0,10]]}},"content":{"2":{"position":[[58,10]]},"5":{"position":[[160,10]]},"11":{"position":[[349,10],[458,10],[572,11],[645,10]]},"12":{"position":[[82,10]]},"13":{"position":[[267,11]]},"15":{"position":[[48,11]]},"17":{"position":[[44,10],[163,10]]},"18":{"position":[[108,11],[484,10],[509,10]]},"19":{"position":[[30,10]]},"20":{"position":[[63,13]]},"32":{"position":[[470,10]]},"33":{"position":[[336,10],[755,11]]},"36":{"position":[[282,10]]},"43":{"position":[[895,14]]},"46":{"position":[[109,10]]},"52":{"position":[[827,11]]},"53":{"position":[[417,10],[2225,10]]},"54":{"position":[[248,10]]},"56":{"position":[[368,10],[1766,10]]},"57":{"position":[[97,10],[820,10]]},"61":{"position":[[131,10]]},"62":{"position":[[141,10]]},"63":{"position":[[30,10]]},"64":{"position":[[1,10],[475,10]]},"65":{"position":[[308,13]]},"71":{"position":[[864,10]]},"73":{"position":[[1499,10],[1568,11]]},"79":{"position":[[1,10]]},"80":{"position":[[105,10]]},"81":{"position":[[44,10]]},"82":{"position":[[1343,10]]},"89":{"position":[[400,10],[564,10]]},"92":{"position":[[1047,10],[1096,10],[1268,10],[2755,10],[3947,10]]},"93":{"position":[[24,11]]},"94":{"position":[[169,10]]},"95":{"position":[[25,10]]}},"keywords":{}}],["непосредствен",{"_index":116,"title":{},"content":{"11":{"position":[[226,15]]}},"keywords":{}}],["неправильн",{"_index":900,"title":{},"content":{"73":{"position":[[166,12]]}},"keywords":{}}],["непредвиден",{"_index":1119,"title":{},"content":{"94":{"position":[[1288,14],[2065,14]]}},"keywords":{}}],["неэкспортируем",{"_index":275,"title":{},"content":{"18":{"position":[[592,16]]}},"keywords":{}}],["нов",{"_index":86,"title":{},"content":{"8":{"position":[[60,5]]}},"keywords":{}}],["нуж",{"_index":169,"title":{"32":{"position":[[11,5]]}},"content":{"13":{"position":[[508,5]]}},"keywords":{}}],["нужн",{"_index":24,"title":{"60":{"position":[[37,5]]}},"content":{"2":{"position":[[160,5]]},"32":{"position":[[153,5]]},"60":{"position":[[59,5]]},"64":{"position":[[230,5]]}},"keywords":{}}],["обернут",{"_index":765,"title":{},"content":{"62":{"position":[[1783,8]]}},"keywords":{}}],["област",{"_index":376,"title":{},"content":{"33":{"position":[[12,7]]},"34":{"position":[[12,7]]},"51":{"position":[[48,7]]}},"keywords":{}}],["оболочк",{"_index":233,"title":{},"content":{"17":{"position":[[576,9]]}},"keywords":{}}],["обрабатыва",{"_index":1005,"title":{},"content":{"84":{"position":[[377,12]]},"92":{"position":[[4433,14]]}},"keywords":{}}],["обработа",{"_index":509,"title":{},"content":{"43":{"position":[[860,10]]},"65":{"position":[[322,10]]},"81":{"position":[[322,10]]},"82":{"position":[[1264,10]]},"83":{"position":[[30,10]]},"92":{"position":[[1279,10]]}},"keywords":{}}],["обработк",{"_index":306,"title":{"65":{"position":[[0,9]]},"83":{"position":[[0,9]]}},"content":{"20":{"position":[[84,9]]}},"keywords":{}}],["образ",{"_index":106,"title":{},"content":{"11":{"position":[[75,8]]},"13":{"position":[[974,5]]}},"keywords":{}}],["объ",{"_index":186,"title":{},"content":{"13":{"position":[[1013,7]]}},"keywords":{}}],["объедин",{"_index":733,"title":{},"content":{"57":{"position":[[831,10]]}},"keywords":{}}],["объект",{"_index":830,"title":{},"content":{"65":{"position":[[117,6]]},"70":{"position":[[29,6]]}},"keywords":{}}],["огранич",{"_index":836,"title":{},"content":{"67":{"position":[[106,9]]}},"keywords":{}}],["ограничен",{"_index":838,"title":{},"content":{"67":{"position":[[185,11]]},"68":{"position":[[97,11],[369,11]]},"80":{"position":[[187,11]]}},"keywords":{}}],["одинаков",{"_index":905,"title":{},"content":{"73":{"position":[[998,10]]}},"keywords":{}}],["одн",{"_index":446,"title":{"46":{"position":[[39,5]]},"57":{"position":[[23,5]]}},"content":{"37":{"position":[[171,5]]},"46":{"position":[[467,5]]},"57":{"position":[[1,4],[118,5]]},"89":{"position":[[348,4]]},"92":{"position":[[4448,5]]}},"keywords":{}}],["одновремен",{"_index":751,"title":{},"content":{"61":{"position":[[676,12]]}},"keywords":{}}],["однозначн",{"_index":355,"title":{},"content":{"32":{"position":[[191,10]]}},"keywords":{}}],["означа",{"_index":179,"title":{},"content":{"13":{"position":[[901,9]]}},"keywords":{}}],["окружен",{"_index":165,"title":{},"content":{"13":{"position":[[448,9]]},"17":{"position":[[823,9]]}},"keywords":{}}],["онлайн",{"_index":918,"title":{},"content":{"74":{"position":[[202,6]]},"89":{"position":[[2721,6]]}},"keywords":{}}],["описа",{"_index":77,"title":{},"content":{"7":{"position":[[38,9]]},"11":{"position":[[627,9]]},"92":{"position":[[5042,7]]}},"keywords":{}}],["описан",{"_index":940,"title":{},"content":{"78":{"position":[[262,9]]}},"keywords":{}}],["описыва",{"_index":435,"title":{},"content":{"36":{"position":[[367,9]]}},"keywords":{}}],["оплат",{"_index":438,"title":{},"content":{"36":{"position":[[446,10]]},"56":{"position":[[298,7]]},"64":{"position":[[996,8]]},"68":{"position":[[460,8]]},"84":{"position":[[745,8]]},"89":{"position":[[1711,8]]},"94":{"position":[[728,7],[1819,7]]},"95":{"position":[[998,7]]}},"keywords":{}}],["оплата...)описа",{"_index":837,"title":{},"content":{"67":{"position":[[165,19]]}},"keywords":{}}],["оплач",{"_index":414,"title":{},"content":{"34":{"position":[[253,7]]},"56":{"position":[[183,7]]},"57":{"position":[[400,7]]},"64":{"position":[[2028,11]]},"92":{"position":[[1708,7],[2037,7],[2410,9],[2631,7],[4015,7],[4154,9],[5086,7]]}},"keywords":{}}],["оплаченпревыш",{"_index":649,"title":{},"content":{"56":{"position":[[83,16]]}},"keywords":{}}],["определ",{"_index":283,"title":{},"content":{"19":{"position":[[41,10]]}},"keywords":{}}],["определен",{"_index":437,"title":{},"content":{"36":{"position":[[405,12]]},"92":{"position":[[1024,12]]}},"keywords":{}}],["определя",{"_index":749,"title":{},"content":{"60":{"position":[[15,10]]}},"keywords":{}}],["оптимальн",{"_index":799,"title":{},"content":{"64":{"position":[[392,12]]}},"keywords":{}}],["оптимизац",{"_index":190,"title":{"64":{"position":[[0,11]]}},"content":{"13":{"position":[[1055,11]]},"62":{"position":[[1596,12]]}},"keywords":{}}],["организац",{"_index":388,"title":{},"content":{"33":{"position":[[189,12],[391,12],[471,12]]},"47":{"position":[[176,11],[353,12]]},"67":{"position":[[152,12]]},"68":{"position":[[327,12],[488,12]]},"74":{"position":[[249,12]]}},"keywords":{}}],["организации.docact",{"_index":408,"title":{},"content":{"33":{"position":[[709,22]]}},"keywords":{}}],["организацию"",{"_index":570,"title":{},"content":{"47":{"position":[[121,17]]}},"keywords":{}}],["организациякнопк",{"_index":568,"title":{},"content":{"47":{"position":[[89,17]]}},"keywords":{}}],["основ",{"_index":152,"title":{},"content":{"13":{"position":[[82,6]]},"67":{"position":[[119,6]]},"73":{"position":[[1547,6]]},"81":{"position":[[201,6]]},"82":{"position":[[191,6]]}},"keywords":{}}],["основыва",{"_index":844,"title":{},"content":{"68":{"position":[[109,12],[381,12],[808,12]]}},"keywords":{}}],["оставл",{"_index":739,"title":{},"content":{"58":{"position":[[32,8]]}},"keywords":{}}],["осуществля",{"_index":293,"title":{},"content":{"19":{"position":[[269,14]]}},"keywords":{}}],["ответствен",{"_index":814,"title":{},"content":{"64":{"position":[[1353,12]]}},"keywords":{}}],["отвеча",{"_index":756,"title":{},"content":{"62":{"position":[[1211,8]]},"74":{"position":[[28,8]]}},"keywords":{}}],["отдельн",{"_index":129,"title":{},"content":{"11":{"position":[[478,9]]},"41":{"position":[[182,8]]},"62":{"position":[[1686,9]]},"92":{"position":[[1117,9]]}},"keywords":{}}],["отказ",{"_index":454,"title":{"55":{"position":[[17,6]]},"83":{"position":[[27,6]]}},"content":{"38":{"position":[[80,6],[204,6]]},"45":{"position":[[73,6]]},"46":{"position":[[524,6],[646,6]]},"53":{"position":[[2215,6]]},"57":{"position":[[22,6],[519,7]]},"70":{"position":[[97,6],[254,6]]},"81":{"position":[[353,7]]},"82":{"position":[[1283,7],[1321,6]]},"83":{"position":[[63,7]]},"84":{"position":[[251,6],[408,6]]},"92":{"position":[[3929,6]]},"93":{"position":[[131,6]]},"94":{"position":[[226,5]]}},"keywords":{}}],["отказа",{"_index":1115,"title":{},"content":{"94":{"position":[[746,8],[1837,8]]},"95":{"position":[[1016,8]]}},"keywords":{}}],["отказыва",{"_index":508,"title":{},"content":{"43":{"position":[[813,10]]}},"keywords":{}}],["откр",{"_index":651,"title":{},"content":{"56":{"position":[[262,9]]},"68":{"position":[[174,8],[446,8]]},"93":{"position":[[1093,7]]}},"keywords":{}}],["открыва",{"_index":1114,"title":{},"content":{"94":{"position":[[710,9]]}},"keywords":{}}],["открыт",{"_index":531,"title":{},"content":{"43":{"position":[[1893,8]]},"67":{"position":[[376,8]]}},"keywords":{}}],["открыт/закр",{"_index":912,"title":{},"content":{"74":{"position":[[61,13]]}},"keywords":{}}],["отлича",{"_index":348,"title":{},"content":{"32":{"position":[[53,10]]}},"keywords":{}}],["отличн",{"_index":6,"title":{},"content":{"1":{"position":[[18,8]]}},"keywords":{}}],["относ",{"_index":593,"title":{},"content":{"51":{"position":[[258,9],[368,9]]}},"keywords":{}}],["относя",{"_index":553,"title":{},"content":{"46":{"position":[[270,11]]}},"keywords":{}}],["отобража",{"_index":870,"title":{},"content":{"71":{"position":[[56,12]]},"73":{"position":[[37,12]]}},"keywords":{}}],["отобраз",{"_index":654,"title":{},"content":{"56":{"position":[[379,10]]}},"keywords":{}}],["отрендер",{"_index":1002,"title":{},"content":{"84":{"position":[[206,11]]}},"keywords":{}}],["отрицательн",{"_index":1055,"title":{},"content":{"92":{"position":[[1306,13]]},"93":{"position":[[69,13]]}},"keywords":{}}],["ошибк",{"_index":725,"title":{},"content":{"57":{"position":[[642,6],[1019,6]]},"94":{"position":[[964,8],[1259,8],[1303,6],[1928,8],[2036,8],[2080,6]]}},"keywords":{}}],["ошибок",{"_index":447,"title":{},"content":{"37":{"position":[[186,6]]},"57":{"position":[[557,6]]}},"keywords":{}}],["пакет",{"_index":467,"title":{"39":{"position":[[8,5]]}},"content":{"39":{"position":[[53,5]]},"57":{"position":[[451,5]]},"88":{"position":[[41,6]]}},"keywords":{}}],["панел",{"_index":993,"title":{},"content":{"82":{"position":[[1047,7]]}},"keywords":{}}],["парс",{"_index":197,"title":{},"content":{"15":{"position":[[133,6]]}},"keywords":{}}],["паттерн",{"_index":315,"title":{"21":{"position":[[18,8]]},"37":{"position":[[11,8]]},"38":{"position":[[0,7]]}},"content":{"36":{"position":[[134,7],[216,7]]},"39":{"position":[[29,8]]}},"keywords":{}}],["паттернизбежа",{"_index":444,"title":{},"content":{"37":{"position":[[144,15]]}},"keywords":{}}],["перезагруз",{"_index":686,"title":{},"content":{"56":{"position":[[2702,13]]},"64":{"position":[[2234,13]]},"94":{"position":[[1403,13]]}},"keywords":{}}],["переиспольз",{"_index":711,"title":{},"content":{"57":{"position":[[29,16]]}},"keywords":{}}],["переиспользова",{"_index":557,"title":{},"content":{"46":{"position":[[431,17]]},"54":{"position":[[60,16],[259,16]]}},"keywords":{}}],["переиспользован",{"_index":643,"title":{"54":{"position":[[0,17]]},"85":{"position":[[7,17]]}},"content":{"54":{"position":[[98,17]]}},"keywords":{}}],["перемен",{"_index":31,"title":{"18":{"position":[[12,10]]}},"content":{"4":{"position":[[14,10],[250,10]]},"11":{"position":[[200,10]]},"12":{"position":[[34,10],[174,11]]},"13":{"position":[[623,10]]},"15":{"position":[[144,10]]},"17":{"position":[[841,10],[1065,10]]},"18":{"position":[[463,12],[609,10],[661,10],[899,10]]},"19":{"position":[[19,10],[258,10]]}},"keywords":{}}],["перенос",{"_index":887,"title":{},"content":{"71":{"position":[[1398,9]]}},"keywords":{}}],["пересечен",{"_index":646,"title":{},"content":{"54":{"position":[[154,11]]}},"keywords":{}}],["пересобира",{"_index":122,"title":{},"content":{"11":{"position":[[367,12]]}},"keywords":{}}],["перманентн",{"_index":372,"title":{},"content":{"32":{"position":[[481,11]]}},"keywords":{}}],["писа",{"_index":1050,"title":{},"content":{"92":{"position":[[1058,6]]}},"keywords":{}}],["платн",{"_index":386,"title":{},"content":{"33":{"position":[[142,7]]},"34":{"position":[[140,7]]},"68":{"position":[[295,7]]}},"keywords":{}}],["повлия",{"_index":187,"title":{},"content":{"13":{"position":[[1025,8]]}},"keywords":{}}],["повторен",{"_index":445,"title":{},"content":{"37":{"position":[[160,10]]}},"keywords":{}}],["подготавлива",{"_index":629,"title":{},"content":{"53":{"position":[[1472,14]]},"62":{"position":[[983,14]]}},"keywords":{}}],["подготов",{"_index":624,"title":{"62":{"position":[[29,10]]}},"content":{"53":{"position":[[1199,11]]},"62":{"position":[[710,11]]}},"keywords":{}}],["подготовк",{"_index":329,"title":{"28":{"position":[[0,10]]},"59":{"position":[[0,10]]}},"content":{"46":{"position":[[731,10]]},"52":{"position":[[809,10]]},"53":{"position":[[2099,10]]},"60":{"position":[[32,10]]},"62":{"position":[[66,10],[1193,10],[1297,10],[1448,10],[1868,10]]},"64":{"position":[[63,10]]}},"keywords":{}}],["подготовл",{"_index":794,"title":{},"content":{"63":{"position":[[819,13]]}},"keywords":{}}],["поддержива",{"_index":450,"title":{},"content":{"38":{"position":[[11,14]]},"92":{"position":[[2815,12]]}},"keywords":{}}],["поддержк",{"_index":124,"title":{},"content":{"11":{"position":[[413,9],[588,9]]},"39":{"position":[[19,9]]},"72":{"position":[[163,9]]},"78":{"position":[[159,10],[357,9]]},"80":{"position":[[233,10]]}},"keywords":{}}],["подключен",{"_index":567,"title":{},"content":{"47":{"position":[[76,12]]}},"keywords":{}}],["подм",{"_index":277,"title":{},"content":{"18":{"position":[[643,7]]},"95":{"position":[[5,7]]}},"keywords":{}}],["подмен",{"_index":267,"title":{},"content":{"18":{"position":[[495,10],[864,8]]}},"keywords":{}}],["подменя",{"_index":243,"title":{},"content":{"17":{"position":[[1055,9]]}},"keywords":{}}],["подобласт",{"_index":590,"title":{},"content":{"51":{"position":[[26,10],[123,10]]}},"keywords":{}}],["подробн",{"_index":11,"title":{},"content":{"1":{"position":[[95,9]]},"17":{"position":[[1116,9]]}},"keywords":{}}],["подстав",{"_index":164,"title":{},"content":{"13":{"position":[[424,11]]}},"keywords":{}}],["подстановк",{"_index":245,"title":{"18":{"position":[[0,11]]}},"content":{},"keywords":{}}],["подход",{"_index":104,"title":{},"content":{"11":{"position":[[47,7]]},"62":{"position":[[1474,6]]},"82":{"position":[[327,8]]}},"keywords":{}}],["позвол",{"_index":559,"title":{},"content":{"46":{"position":[[480,8]]},"52":{"position":[[680,8]]}},"keywords":{}}],["позволя",{"_index":304,"title":{"37":{"position":[[20,10]]}},"content":{"20":{"position":[[12,10]]},"38":{"position":[[98,9]]},"46":{"position":[[388,11]]},"53":{"position":[[1189,9]]},"62":{"position":[[700,9]]},"78":{"position":[[132,9]]},"81":{"position":[[274,11]]},"82":{"position":[[1254,9]]},"84":{"position":[[196,9]]},"92":{"position":[[5412,9]]}},"keywords":{}}],["показа",{"_index":998,"title":{},"content":{"82":{"position":[[1354,8]]}},"keywords":{}}],["показыва",{"_index":1112,"title":{},"content":{"94":{"position":[[496,10],[939,10],[1234,10]]}},"keywords":{}}],["покр",{"_index":1095,"title":{},"content":{"93":{"position":[[37,7]]}},"keywords":{}}],["покрыва",{"_index":1100,"title":{},"content":{"93":{"position":[[195,9]]}},"keywords":{}}],["покрыт",{"_index":1048,"title":{"92":{"position":[[9,8]]}},"content":{},"keywords":{}}],["политик",{"_index":579,"title":{"48":{"position":[[10,8]]},"50":{"position":[[9,8]]},"51":{"position":[[0,8]]},"53":{"position":[[9,9]]}},"content":{"49":{"position":[[5,8]]},"52":{"position":[[662,9]]}},"keywords":{}}],["полк",{"_index":534,"title":{},"content":{"43":{"position":[[2025,5]]},"56":{"position":[[58,6],[153,5],[358,6],[1199,5],[2302,8],[2611,7],[2677,5]]},"61":{"position":[[956,5]]},"92":{"position":[[525,5],[1217,7],[2092,5],[2210,7],[2686,7],[3671,7],[5141,7]]},"94":{"position":[[677,8],[1199,7],[1378,5],[1685,7]]},"95":{"position":[[347,7],[963,8]]}},"keywords":{}}],["полке"",{"_index":658,"title":{},"content":{"56":{"position":[[451,12]]}},"keywords":{}}],["полку</button>",{"_index":705,"title":{},"content":{"56":{"position":[[3307,20]]}},"keywords":{}}],["полку"",{"_index":650,"title":{},"content":{"56":{"position":[[243,11]]}},"keywords":{}}],["положительн",{"_index":1054,"title":{},"content":{"92":{"position":[[1290,13]]},"93":{"position":[[53,13]]}},"keywords":{}}],["получ",{"_index":750,"title":{},"content":{"61":{"position":[[154,8]]}},"keywords":{}}],["получа",{"_index":9,"title":{},"content":{"1":{"position":[[50,8]]},"20":{"position":[[24,8],[155,8]]},"38":{"position":[[176,8]]},"46":{"position":[[120,8]]},"47":{"position":[[502,8]]}},"keywords":{}}],["получаетлиб",{"_index":109,"title":{},"content":{"11":{"position":[[105,12]]}},"keywords":{}}],["получен",{"_index":100,"title":{"11":{"position":[[9,9]]},"65":{"position":[[18,9]]}},"content":{"11":{"position":[[1,9],[127,10]]},"20":{"position":[[107,9]]},"36":{"position":[[254,10]]},"53":{"position":[[74,9]]},"64":{"position":[[1330,9]]}},"keywords":{}}],["пользовател",{"_index":385,"title":{},"content":{"33":{"position":[[127,12],[300,12],[378,12],[686,12]]},"34":{"position":[[125,12],[272,13]]},"38":{"position":[[149,12]]},"43":{"position":[[942,12]]},"56":{"position":[[13,12],[167,12],[311,12]]},"57":{"position":[[1191,12]]},"67":{"position":[[235,12]]},"68":{"position":[[132,12],[202,13],[279,13],[404,12],[637,13],[703,13],[831,13]]},"71":{"position":[[81,12]]},"73":{"position":[[62,12]]},"82":{"position":[[238,12]]},"89":{"position":[[55,12],[165,12],[386,13]]},"93":{"position":[[947,12],[1020,12],[1145,12]]}},"keywords":{}}],["пользовательск",{"_index":360,"title":{},"content":{"32":{"position":[[261,17]]}},"keywords":{}}],["пользователя)услов",{"_index":842,"title":{},"content":{"67":{"position":[[418,20]]}},"keywords":{}}],["помеща",{"_index":110,"title":{},"content":{"11":{"position":[[118,8]]}},"keywords":{}}],["помощ",{"_index":230,"title":{},"content":{"17":{"position":[[556,6]]},"69":{"position":[[46,7]]},"88":{"position":[[19,7]]}},"keywords":{}}],["пониман",{"_index":942,"title":{},"content":{"78":{"position":[[331,9]]}},"keywords":{}}],["попаст",{"_index":174,"title":{},"content":{"13":{"position":[[713,7]]}},"keywords":{}}],["попроб",{"_index":535,"title":{},"content":{"43":{"position":[[2039,10]]},"56":{"position":[[2691,10]]},"64":{"position":[[2223,10]]},"94":{"position":[[1392,10]]}},"keywords":{}}],["пород",{"_index":554,"title":{},"content":{"46":{"position":[[347,7]]}},"keywords":{}}],["послед",{"_index":400,"title":{},"content":{"33":{"position":[[556,11]]}},"keywords":{}}],["последств",{"_index":897,"title":{},"content":{"72":{"position":[[141,11]]}},"keywords":{}}],["посредств",{"_index":752,"title":{"69":{"position":[[21,11]]}},"content":{"61":{"position":[[706,11]]}},"keywords":{}}],["постро",{"_index":153,"title":{},"content":{"13":{"position":[[104,8]]}},"keywords":{}}],["потер",{"_index":401,"title":{},"content":{"33":{"position":[[568,6]]}},"keywords":{}}],["поэт",{"_index":589,"title":{},"content":{"49":{"position":[[417,7]]},"51":{"position":[[143,7],[293,7],[394,7]]},"82":{"position":[[374,7]]},"94":{"position":[[151,7]]}},"keywords":{}}],["прав",{"_index":87,"title":{},"content":{"8":{"position":[[66,6]]},"46":{"position":[[458,6]]},"86":{"position":[[5,7]]}},"keywords":{}}],["правильн",{"_index":403,"title":{},"content":{"33":{"position":[[586,10]]},"73":{"position":[[1081,10]]}},"keywords":{}}],["превыш",{"_index":1057,"title":{},"content":{"92":{"position":[[1825,9],[2050,9],[2461,9],[2644,9],[5099,9]]},"94":{"position":[[983,9],[1947,9]]}},"keywords":{}}],["предел",{"_index":653,"title":{},"content":{"56":{"position":[[331,6]]}},"keywords":{}}],["предложен",{"_index":83,"title":{},"content":{"8":{"position":[[7,11]]},"56":{"position":[[282,12]]}},"keywords":{}}],["предмет",{"_index":357,"title":{},"content":{"32":{"position":[[221,7]]}},"keywords":{}}],["предметн",{"_index":375,"title":{},"content":{"33":{"position":[[1,10]]},"34":{"position":[[1,10]]},"51":{"position":[[15,10],[37,10],[112,10]]}},"keywords":{}}],["предназначен",{"_index":743,"title":{},"content":{"58":{"position":[[68,14]]}},"keywords":{}}],["предоставля",{"_index":22,"title":{"38":{"position":[[8,14]]}},"content":{"2":{"position":[[117,13]]},"36":{"position":[[102,13],[181,13]]},"41":{"position":[[88,13]]}},"keywords":{}}],["преимуществ",{"_index":303,"title":{"20":{"position":[[0,12]]}},"content":{},"keywords":{}}],["префикс",{"_index":47,"title":{},"content":{"4":{"position":[[261,9]]},"5":{"position":[[211,9]]},"15":{"position":[[192,10]]},"17":{"position":[[854,9]]},"75":{"position":[[53,7]]},"90":{"position":[[17,7]]}},"keywords":{}}],["приватн",{"_index":1019,"title":{"87":{"position":[[8,9]]}},"content":{},"keywords":{}}],["привед",{"_index":562,"title":{},"content":{"46":{"position":[[662,8]]}},"keywords":{}}],["приведет",{"_index":397,"title":{},"content":{"33":{"position":[[488,8]]},"72":{"position":[[98,8]]}},"keywords":{}}],["привнос",{"_index":367,"title":{},"content":{"32":{"position":[[376,9]]}},"keywords":{}}],["привод",{"_index":645,"title":{},"content":{"54":{"position":[[143,8]]}},"keywords":{}}],["приложен",{"_index":5,"title":{"76":{"position":[[30,10]]}},"content":{"1":{"position":[[6,11]]},"4":{"position":[[184,11]]},"5":{"position":[[6,10],[123,10]]},"11":{"position":[[397,10],[538,10]]},"13":{"position":[[283,10]]},"15":{"position":[[360,11]]},"19":{"position":[[324,11]]},"20":{"position":[[129,10]]},"33":{"position":[[543,10],[774,10]]},"37":{"position":[[98,11],[213,11]]},"38":{"position":[[283,10]]},"45":{"position":[[46,10],[114,10]]},"46":{"position":[[19,10]]},"53":{"position":[[59,10],[122,10],[825,10]]},"62":{"position":[[336,10],[1731,11],[1950,10]]},"63":{"position":[[69,11],[762,11]]},"64":{"position":[[145,11],[251,10],[355,10],[1375,11]]},"67":{"position":[[83,10]]},"82":{"position":[[1422,11]]}},"keywords":{}}],["приложениеесл",{"_index":123,"title":{},"content":{"11":{"position":[[380,14]]}},"keywords":{}}],["применен",{"_index":439,"title":{"37":{"position":[[0,10]]}},"content":{},"keywords":{}}],["применя",{"_index":421,"title":{"36":{"position":[[11,9]]}},"content":{},"keywords":{}}],["пример",{"_index":96,"title":{"10":{"position":[[0,7]]},"21":{"position":[[0,6]]},"33":{"position":[[0,6]]},"34":{"position":[[0,6]]},"43":{"position":[[0,7]]},"47":{"position":[[0,6]]},"52":{"position":[[0,6]]},"56":{"position":[[0,6]]},"61":{"position":[[0,7]]},"68":{"position":[[0,7]]},"71":{"position":[[0,6]]},"73":{"position":[[0,7]]},"79":{"position":[[0,7]]},"82":{"position":[[0,7]]},"84":{"position":[[0,7]]},"89":{"position":[[0,7]]}},"content":{"10":{"position":[[1,6]]},"13":{"position":[[206,6]]},"15":{"position":[[1,6]]},"17":{"position":[[725,6]]},"18":{"position":[[278,7]]},"39":{"position":[[103,8]]},"51":{"position":[[202,7]]},"53":{"position":[[176,6],[1784,6]]},"73":{"position":[[933,8]]},"74":{"position":[[100,7]]},"92":{"position":[[1,6]]},"94":{"position":[[1,7]]}},"keywords":{}}],["принима",{"_index":88,"title":{},"content":{"8":{"position":[[73,9]]},"64":{"position":[[507,11]]},"80":{"position":[[199,11]]}},"keywords":{}}],["принцип",{"_index":1045,"title":{"91":{"position":[[0,8]]}},"content":{},"keywords":{}}],["присутств",{"_index":899,"title":{},"content":{"73":{"position":[[122,12]]}},"keywords":{}}],["приход",{"_index":145,"title":{},"content":{"12":{"position":[[48,11]]}},"keywords":{}}],["причин",{"_index":44,"title":{"46":{"position":[[0,7]]},"55":{"position":[[9,7]]},"83":{"position":[[20,6]]}},"content":{"4":{"position":[[212,7]]},"13":{"position":[[840,7]]},"38":{"position":[[73,6],[196,7]]},"43":{"position":[[836,9]]},"46":{"position":[[639,6]]},"57":{"position":[[14,7],[206,7],[511,7]]},"69":{"position":[[1162,8]]},"70":{"position":[[89,7],[245,8]]},"81":{"position":[[345,7]]},"82":{"position":[[1275,7],[1313,7]]},"83":{"position":[[51,7]]},"84":{"position":[[243,7],[400,7]]},"94":{"position":[[783,8],[1874,10]]},"95":{"position":[[1053,10],[1134,8]]}},"keywords":{}}],["пробл",{"_index":139,"title":{"65":{"position":[[10,7]]}},"content":{"11":{"position":[[637,7]]}},"keywords":{}}],["проблем",{"_index":99,"title":{"11":{"position":[[0,8]]}},"content":{"11":{"position":[[311,9]]},"33":{"position":[[203,8]]},"34":{"position":[[207,8]]}},"keywords":{}}],["проверк",{"_index":396,"title":{},"content":{"33":{"position":[[462,8],[789,8]]},"34":{"position":[[289,8]]},"47":{"position":[[334,8],[471,8]]},"89":{"position":[[368,8]]}},"keywords":{}}],["проверя",{"_index":406,"title":{},"content":{"33":{"position":[[671,9]]},"34":{"position":[[241,11],[473,9]]},"73":{"position":[[1510,9]]},"92":{"position":[[3958,9]]},"93":{"position":[[148,9]]}},"keywords":{}}],["провест",{"_index":416,"title":{},"content":{"34":{"position":[[311,8]]}},"keywords":{}}],["проект",{"_index":17,"title":{},"content":{"2":{"position":[[26,7]]},"18":{"position":[[24,7],[131,7]]},"51":{"position":[[56,8],[134,8]]}},"keywords":{}}],["проектирован",{"_index":78,"title":{},"content":{"7":{"position":[[93,14]]}},"keywords":{}}],["произойт",{"_index":722,"title":{},"content":{"57":{"position":[[541,9]]}},"keywords":{}}],["произошл",{"_index":724,"title":{},"content":{"57":{"position":[[632,9],[1009,9]]},"94":{"position":[[1278,9],[2055,9]]}},"keywords":{}}],["происход",{"_index":171,"title":{},"content":{"13":{"position":[[600,11]]},"71":{"position":[[1510,11]]},"73":{"position":[[973,10]]},"92":{"position":[[1348,10]]}},"keywords":{}}],["пройд",{"_index":507,"title":{},"content":{"43":{"position":[[800,9]]}},"keywords":{}}],["пройден",{"_index":1082,"title":{},"content":{"92":{"position":[[4040,10]]}},"keywords":{}}],["пройт",{"_index":533,"title":{},"content":{"43":{"position":[[1951,6]]}},"keywords":{}}],["прост",{"_index":469,"title":{},"content":{"39":{"position":[[11,7]]},"80":{"position":[[225,7]]}},"keywords":{}}],["простот",{"_index":936,"title":{},"content":{"78":{"position":[[150,8],[348,8]]}},"keywords":{}}],["протестирова",{"_index":1109,"title":{},"content":{"94":{"position":[[114,14],[180,14]]}},"keywords":{}}],["противн",{"_index":473,"title":{},"content":{"41":{"position":[[128,9]]}},"keywords":{}}],["прохожден",{"_index":512,"title":{},"content":{"43":{"position":[[955,11]]}},"keywords":{}}],["процесс",{"_index":273,"title":{},"content":{"18":{"position":[[571,9]]}},"keywords":{}}],["прочита",{"_index":346,"title":{},"content":{"32":{"position":[[25,9]]},"89":{"position":[[2705,9]]}},"keywords":{}}],["прочтен",{"_index":1117,"title":{},"content":{"94":{"position":[[1017,9],[1981,11]]}},"keywords":{}}],["прошел",{"_index":411,"title":{},"content":{"34":{"position":[[168,6]]}},"keywords":{}}],["работ",{"_index":0,"title":{"0":{"position":[[0,6]]}},"content":{"2":{"position":[[95,6]]},"38":{"position":[[129,6]]}},"keywords":{}}],["работа",{"_index":66,"title":{},"content":{"6":{"position":[[27,8]]},"11":{"position":[[56,8]]},"36":{"position":[[142,8]]},"51":{"position":[[94,8]]}},"keywords":{}}],["раз",{"_index":185,"title":{},"content":{"13":{"position":[[1005,4]]}},"keywords":{}}],["развертыван",{"_index":137,"title":{},"content":{"11":{"position":[[600,13]]}},"keywords":{}}],["разветвлен",{"_index":272,"title":{},"content":{"18":{"position":[[557,13]]}},"keywords":{}}],["развива",{"_index":443,"title":{},"content":{"37":{"position":[[134,9]]}},"keywords":{}}],["раздач",{"_index":202,"title":{},"content":{"15":{"position":[[235,7],[331,7]]}},"keywords":{}}],["раздел",{"_index":64,"title":{},"content":{"6":{"position":[[6,6]]}},"keywords":{}}],["разметк",{"_index":157,"title":{},"content":{"13":{"position":[[294,8]]}},"keywords":{}}],["разн",{"_index":448,"title":{},"content":{"37":{"position":[[206,6]]},"46":{"position":[[284,6]]},"53":{"position":[[2244,6]]},"57":{"position":[[52,7]]}},"keywords":{}}],["разработк",{"_index":195,"title":{},"content":{"15":{"position":[[37,10]]},"37":{"position":[[22,10]]}},"keywords":{}}],["разработчик",{"_index":175,"title":{},"content":{"13":{"position":[[740,11]]},"38":{"position":[[164,11]]}},"keywords":{}}],["разреша",{"_index":860,"title":{},"content":{"69":{"position":[[1094,9]]}},"keywords":{}}],["разрешен",{"_index":873,"title":{},"content":{"71":{"position":[[884,10],[1483,10]]},"94":{"position":[[213,10]]}},"keywords":{}}],["рамк",{"_index":67,"title":{},"content":{"6":{"position":[[44,6]]},"47":{"position":[[162,6]]},"51":{"position":[[105,6]]}},"keywords":{}}],["ран",{"_index":58,"title":{},"content":{"5":{"position":[[84,5]]}},"keywords":{}}],["располага",{"_index":715,"title":{},"content":{"57":{"position":[[230,13]]}},"keywords":{}}],["расчет",{"_index":370,"title":{},"content":{"32":{"position":[[424,7]]},"46":{"position":[[554,7]]},"57":{"position":[[616,7],[993,7]]}},"keywords":{}}],["расширя",{"_index":429,"title":{},"content":{"36":{"position":[[224,9]]}},"keywords":{}}],["реакц",{"_index":1110,"title":{},"content":{"94":{"position":[[202,7]]}},"keywords":{}}],["реализ",{"_index":572,"title":{},"content":{"47":{"position":[[251,9],[386,9]]},"67":{"position":[[452,11]]}},"keywords":{}}],["реализац",{"_index":314,"title":{"21":{"position":[[7,10]]},"71":{"position":[[7,10]]},"88":{"position":[[0,10]]}},"content":{"37":{"position":[[62,10],[193,10]]},"43":{"position":[[80,10]]},"53":{"position":[[183,11],[2157,10]]},"81":{"position":[[137,10],[296,10]]},"82":{"position":[[101,10],[287,11]]}},"keywords":{}}],["реализова",{"_index":97,"title":{},"content":{"10":{"position":[[8,10]]},"36":{"position":[[15,11]]},"39":{"position":[[42,10]]},"43":{"position":[[1881,11]]},"82":{"position":[[140,10]]},"89":{"position":[[253,11],[336,11],[411,11]]},"94":{"position":[[10,13]]}},"keywords":{}}],["реализу",{"_index":979,"title":{},"content":{"82":{"position":[[382,9]]}},"keywords":{}}],["реализуем",{"_index":1058,"title":{},"content":{"92":{"position":[[2115,11]]},"94":{"position":[[1592,11]]}},"keywords":{}}],["реальн",{"_index":605,"title":{},"content":{"52":{"position":[[269,8]]},"53":{"position":[[383,8]]},"56":{"position":[[572,8],[1722,8]]},"61":{"position":[[201,8]]},"62":{"position":[[107,8]]},"69":{"position":[[355,8]]},"89":{"position":[[550,8]]}},"keywords":{}}],["регистрир",{"_index":623,"title":{},"content":{"53":{"position":[[1162,12]]},"62":{"position":[[673,12],[1259,12]]}},"keywords":{}}],["редактирован",{"_index":908,"title":{},"content":{"73":{"position":[[1065,14]]}},"keywords":{}}],["режим",{"_index":194,"title":{},"content":{"15":{"position":[[30,6]]}},"keywords":{}}],["рекоменд",{"_index":791,"title":{},"content":{"63":{"position":[[738,13]]}},"keywords":{}}],["рендер",{"_index":792,"title":{},"content":{"63":{"position":[[752,9]]},"64":{"position":[[347,7]]}},"keywords":{}}],["рендеринг",{"_index":769,"title":{},"content":{"62":{"position":[[1940,9]]},"64":{"position":[[135,9],[240,10]]}},"keywords":{}}],["репозитор",{"_index":148,"title":{},"content":{"13":{"position":[[3,11],[686,11]]}},"keywords":{}}],["ресурс",{"_index":136,"title":{},"content":{"11":{"position":[[562,9]]}},"keywords":{}}],["решен",{"_index":138,"title":{},"content":{"11":{"position":[[619,7]]},"33":{"position":[[414,7],[597,7]]},"34":{"position":[[366,7]]},"47":{"position":[[216,7],[565,7]]},"56":{"position":[[465,7]]},"71":{"position":[[121,7]]},"73":{"position":[[179,8],[1092,8]]},"89":{"position":[[234,7]]}},"keywords":{}}],["реэкспортирова",{"_index":606,"title":{},"content":{"52":{"position":[[290,18]]},"53":{"position":[[428,16]]},"56":{"position":[[593,18]]},"61":{"position":[[222,18]]},"62":{"position":[[152,16]]},"69":{"position":[[376,18]]},"89":{"position":[[575,16]]}},"keywords":{}}],["рожден",{"_index":1014,"title":{},"content":{"84":{"position":[[905,8]]},"93":{"position":[[978,10],[1136,8]]}},"keywords":{}}],["рол",{"_index":378,"title":{},"content":{"33":{"position":[[26,4],[295,4],[313,5],[681,4]]},"36":{"position":[[127,6],[427,6]]},"67":{"position":[[145,6],[413,4]]},"68":{"position":[[197,4]]}},"keywords":{}}],["ролев",{"_index":427,"title":{},"content":{"36":{"position":[[162,7]]}},"keywords":{}}],["рост",{"_index":714,"title":{},"content":{"57":{"position":[[200,5]]},"72":{"position":[[119,5]]},"73":{"position":[[993,4]]},"92":{"position":[[5431,5]]}},"keywords":{}}],["рут",{"_index":461,"title":{"76":{"position":[[24,5]]}},"content":{"38":{"position":[[277,5]]},"45":{"position":[[108,5]]},"78":{"position":[[282,5]]},"82":{"position":[[313,4]]}},"keywords":{}}],["рутудоступ",{"_index":907,"title":{},"content":{"73":{"position":[[1044,10]]}},"keywords":{}}],["ряд",{"_index":972,"title":{},"content":{"81":{"position":[[124,3]]}},"keywords":{}}],["рядов",{"_index":843,"title":{},"content":{"67":{"position":[[464,7]]}},"keywords":{}}],["сборк",{"_index":134,"title":{},"content":{"11":{"position":[[531,6]]},"12":{"position":[[74,7]]}},"keywords":{}}],["сборок",{"_index":189,"title":{},"content":{"13":{"position":[[1046,6]]}},"keywords":{}}],["сборщик",{"_index":107,"title":{},"content":{"11":{"position":[[85,7]]}},"keywords":{}}],["сведен",{"_index":425,"title":{},"content":{"36":{"position":[[116,8],[195,8],[434,8]]}},"keywords":{}}],["связ",{"_index":371,"title":{},"content":{"32":{"position":[[445,5]]},"78":{"position":[[205,5]]}},"keywords":{}}],["связа",{"_index":374,"title":{"51":{"position":[[18,7]]}},"content":{"32":{"position":[[544,7]]},"46":{"position":[[83,6]]}},"keywords":{}}],["связк",{"_index":426,"title":{},"content":{"36":{"position":[[153,6]]}},"keywords":{}}],["связыван",{"_index":904,"title":{},"content":{"73":{"position":[[946,10]]}},"keywords":{}}],["сгенерир",{"_index":210,"title":{},"content":{"17":{"position":[[86,11]]}},"keywords":{}}],["сгенерирова",{"_index":282,"title":{"19":{"position":[[21,16]]}},"content":{},"keywords":{}}],["сдела",{"_index":32,"title":{},"content":{"4":{"position":[[25,7]]}},"keywords":{}}],["сервер",{"_index":41,"title":{},"content":{"4":{"position":[[140,8]]}},"keywords":{}}],["сервис",{"_index":420,"title":{},"content":{"34":{"position":[[404,7]]},"38":{"position":[[332,10]]}},"keywords":{}}],["сильн",{"_index":132,"title":{},"content":{"11":{"position":[[506,6]]}},"keywords":{}}],["синхрон",{"_index":305,"title":{},"content":{"20":{"position":[[48,10]]}},"keywords":{}}],["систем",{"_index":38,"title":{"51":{"position":[[37,8]]}},"content":{"4":{"position":[[96,7]]},"32":{"position":[[165,7]]},"36":{"position":[[3,7],[38,7]]},"37":{"position":[[33,7],[73,7]]}},"keywords":{}}],["системевозможн",{"_index":564,"title":{},"content":{"46":{"position":[[695,18]]}},"keywords":{}}],["системн",{"_index":721,"title":{},"content":{"57":{"position":[[501,9]]}},"keywords":{}}],["скорост",{"_index":188,"title":{},"content":{"13":{"position":[[1037,8]]}},"keywords":{}}],["скрипт",{"_index":177,"title":{"15":{"position":[[41,7]]}},"content":{"13":{"position":[[808,9]]},"15":{"position":[[115,7]]},"17":{"position":[[70,7],[202,7],[700,6],[749,6]]}},"keywords":{}}],["след",{"_index":105,"title":{},"content":{"11":{"position":[[65,9]]},"17":{"position":[[782,9]]},"18":{"position":[[447,9]]},"62":{"position":[[1817,7]]},"64":{"position":[[12,7]]}},"keywords":{}}],["следова",{"_index":56,"title":{},"content":{"5":{"position":[[64,9]]}},"keywords":{}}],["сло",{"_index":4,"title":{},"content":{"1":{"position":[[1,4]]},"19":{"position":[[319,4]]},"63":{"position":[[64,4]]},"71":{"position":[[1438,5]]}},"keywords":{}}],["сложн",{"_index":898,"title":{},"content":{"72":{"position":[[155,7]]}},"keywords":{}}],["сложност",{"_index":712,"title":{},"content":{"57":{"position":[[173,9]]},"62":{"position":[[1569,10]]}},"keywords":{}}],["случа",{"_index":472,"title":{},"content":{"41":{"position":[[60,7],[138,6]]},"46":{"position":[[74,8]]},"64":{"position":[[1320,6]]},"82":{"position":[[1300,7]]}},"keywords":{}}],["случайн",{"_index":173,"title":{},"content":{"13":{"position":[[704,8]]}},"keywords":{}}],["смен",{"_index":536,"title":{},"content":{"43":{"position":[[2050,7]]}},"keywords":{}}],["снят",{"_index":839,"title":{},"content":{"67":{"position":[[208,5]]}},"keywords":{}}],["собира",{"_index":53,"title":{},"content":{"5":{"position":[[17,10],[134,10]]},"11":{"position":[[469,8]]}},"keywords":{}}],["соблюда",{"_index":762,"title":{},"content":{"62":{"position":[[1546,9]]}},"keywords":{}}],["соглашен",{"_index":59,"title":{"58":{"position":[[0,11]]}},"content":{"5":{"position":[[90,11]]}},"keywords":{}}],["содерж",{"_index":65,"title":{},"content":{"6":{"position":[[13,9]]},"13":{"position":[[254,8]]},"47":{"position":[[608,8]]},"53":{"position":[[804,8]]},"57":{"position":[[477,8]]},"62":{"position":[[315,8]]}},"keywords":{}}],["содержим",{"_index":156,"title":{},"content":{"13":{"position":[[173,10]]},"15":{"position":[[271,11]]},"17":{"position":[[899,11]]}},"keywords":{}}],["созда",{"_index":250,"title":{},"content":{"18":{"position":[[121,7]]},"33":{"position":[[179,9]]},"47":{"position":[[196,7]]},"51":{"position":[[301,9],[402,9]]},"52":{"position":[[654,7]]},"69":{"position":[[13,9]]},"71":{"position":[[1279,7],[2143,7]]},"73":{"position":[[189,7],[1102,7]]},"80":{"position":[[47,7]]},"81":{"position":[[55,7],[188,9]]},"88":{"position":[[7,9]]}},"keywords":{}}],["создава",{"_index":610,"title":{},"content":{"52":{"position":[[702,9]]},"57":{"position":[[148,9]]},"92":{"position":[[1107,9]]}},"keywords":{}}],["создан",{"_index":477,"title":{"50":{"position":[[0,8]]},"52":{"position":[[7,8]]},"69":{"position":[[0,8]]},"81":{"position":[[0,8]]}},"content":{"43":{"position":[[13,8]]},"61":{"position":[[115,8]]},"82":{"position":[[22,8],[260,8]]}},"keywords":{}}],["создаст",{"_index":281,"title":{},"content":{"18":{"position":[[927,7]]}},"keywords":{}}],["соответств",{"_index":999,"title":{},"content":{"82":{"position":[[1363,15]]},"89":{"position":[[68,13],[178,13]]},"92":{"position":[[1361,12],[4070,13]]},"93":{"position":[[1036,13],[1168,13]]},"94":{"position":[[767,15],[1858,15]]},"95":{"position":[[1037,15]]}},"keywords":{}}],["соответствен",{"_index":644,"title":{},"content":{"54":{"position":[[45,14]]}},"keywords":{}}],["соответствова",{"_index":591,"title":{},"content":{"51":{"position":[[167,15]]}},"keywords":{}}],["соста",{"_index":537,"title":{"45":{"position":[[0,6]]}},"content":{},"keywords":{}}],["софт",{"_index":81,"title":{},"content":{"7":{"position":[[126,5]]}},"keywords":{}}],["специфичн",{"_index":369,"title":{},"content":{"32":{"position":[[406,13],[555,14]]}},"keywords":{}}],["способ",{"_index":451,"title":{},"content":{"38":{"position":[[26,6]]}},"keywords":{}}],["сраз",{"_index":938,"title":{},"content":{"78":{"position":[[193,5]]}},"keywords":{}}],["стандартн",{"_index":75,"title":{},"content":{"7":{"position":[[20,11]]},"81":{"position":[[333,11]]}},"keywords":{}}],["стат",{"_index":344,"title":{},"content":{"32":{"position":[[8,6]]}},"keywords":{}}],["статик",{"_index":203,"title":{},"content":{"15":{"position":[[243,7],[339,7]]}},"keywords":{}}],["сторон",{"_index":363,"title":{},"content":{"32":{"position":[[331,7]]}},"keywords":{}}],["страниц",{"_index":687,"title":{"80":{"position":[[10,9]]}},"content":{"56":{"position":[[2716,10]]},"64":{"position":[[2248,10]]},"78":{"position":[[211,8]]},"80":{"position":[[38,8],[96,8]]},"81":{"position":[[111,8],[128,8]]},"82":{"position":[[13,8],[251,8],[1413,8]]},"94":{"position":[[1417,10]]}},"keywords":{}}],["сценар",{"_index":1096,"title":{},"content":{"93":{"position":[[83,9]]}},"keywords":{}}],["счет",{"_index":641,"title":{},"content":{"53":{"position":[[2210,4]]}},"keywords":{}}],["счита",{"_index":1081,"title":{},"content":{"92":{"position":[[4030,9]]}},"keywords":{}}],["так",{"_index":813,"title":{},"content":{"64":{"position":[[1314,5]]}},"keywords":{}}],["тариф",{"_index":851,"title":{},"content":{"68":{"position":[[719,7]]}},"keywords":{}}],["текущ",{"_index":241,"title":{},"content":{"17":{"position":[[814,8]]}},"keywords":{}}],["тест",{"_index":1049,"title":{"92":{"position":[[25,8]]}},"content":{"92":{"position":[[1065,6],[1496,4],[1669,4],[1797,4],[2003,4],[2127,4],[2749,5],[3977,4],[4454,4],[4942,4],[5448,4]]},"93":{"position":[[45,7],[210,4]]},"94":{"position":[[485,4],[699,4],[928,4],[1223,4],[1604,4]]}},"keywords":{}}],["тестирован",{"_index":1046,"title":{"91":{"position":[[9,12]]},"93":{"position":[[0,12]]},"94":{"position":[[0,12]]}},"content":{"92":{"position":[[3916,12]]},"93":{"position":[[5,12],[118,12]]}},"keywords":{}}],["тип",{"_index":284,"title":{},"content":{"19":{"position":[[52,3]]}},"keywords":{}}],["тк",{"_index":269,"title":{},"content":{"18":{"position":[[536,2]]}},"keywords":{}}],["товар",{"_index":805,"title":{},"content":{"64":{"position":[[1005,5]]},"89":{"position":[[129,6],[226,6],[1720,5]]}},"keywords":{}}],["точк",{"_index":613,"title":{"53":{"position":[[32,5]]}},"content":{"53":{"position":[[51,5]]}},"keywords":{}}],["точкерасчет",{"_index":544,"title":{},"content":{"46":{"position":[[38,11]]}},"keywords":{}}],["треб",{"_index":46,"title":{},"content":{"4":{"position":[[234,7]]},"61":{"position":[[54,9]]},"89":{"position":[[243,9]]}},"keywords":{}}],["требован",{"_index":381,"title":{"68":{"position":[[8,11]]}},"content":{"33":{"position":[[66,10],[216,10]]},"34":{"position":[[64,10]]},"36":{"position":[[356,10]]},"43":{"position":[[1,10]]},"47":{"position":[[1,10]]},"54":{"position":[[173,10]]},"56":{"position":[[1,10]]},"67":{"position":[[1,10],[40,10],[479,10]]},"68":{"position":[[605,10],[977,10]]},"71":{"position":[[1,10]]},"73":{"position":[[111,10]]},"81":{"position":[[159,11]]},"82":{"position":[[1,10]]},"89":{"position":[[1,10]]}},"keywords":{}}],["требованиями"",{"_index":856,"title":{},"content":{"68":{"position":[[922,18]]}},"keywords":{}}],["требуем",{"_index":1000,"title":{},"content":{"82":{"position":[[1403,9]]}},"keywords":{}}],["уведомлен",{"_index":655,"title":{},"content":{"56":{"position":[[390,11]]},"94":{"position":[[522,12],[950,11],[1245,11],[1734,12],[1914,11],[2022,11]]},"95":{"position":[[612,12]]}},"keywords":{}}],["увеличива",{"_index":133,"title":{},"content":{"11":{"position":[[513,11]]}},"keywords":{}}],["угод",{"_index":971,"title":{},"content":{"80":{"position":[[213,5]]}},"keywords":{}}],["удобн",{"_index":449,"title":{},"content":{"38":{"position":[[1,7]]}},"keywords":{}}],["указа",{"_index":57,"title":{},"content":{"5":{"position":[[74,9]]},"18":{"position":[[651,9]]},"61":{"position":[[142,7]]},"73":{"position":[[135,7]]},"89":{"position":[[103,10],[213,10]]}},"keywords":{}}],["указыва",{"_index":356,"title":{"60":{"position":[[14,9]]}},"content":{"32":{"position":[[208,9]]},"67":{"position":[[51,9]]},"72":{"position":[[42,9]]}},"keywords":{}}],["улучш",{"_index":455,"title":{},"content":{"38":{"position":[[108,8]]}},"keywords":{}}],["уменьш",{"_index":440,"title":{},"content":{"37":{"position":[[1,9]]}},"keywords":{}}],["управлен",{"_index":423,"title":{},"content":{"36":{"position":[[77,10]]},"74":{"position":[[238,10]]}},"keywords":{}}],["упрост",{"_index":975,"title":{},"content":{"81":{"position":[[286,9]]}},"keywords":{}}],["уровн",{"_index":547,"title":{},"content":{"46":{"position":[[176,6]]},"73":{"position":[[1483,6]]}},"keywords":{}}],["услов",{"_index":431,"title":{},"content":{"36":{"position":[[296,7],[418,8]]},"67":{"position":[[325,7]]},"92":{"position":[[5022,8]]}},"keywords":{}}],["усложня",{"_index":941,"title":{},"content":{"78":{"position":[[321,9]]}},"keywords":{}}],["успешн",{"_index":793,"title":{},"content":{"63":{"position":[[811,7]]},"65":{"position":[[59,7]]},"94":{"position":[[551,7],[1763,7]]},"95":{"position":[[641,7]]}},"keywords":{}}],["участк",{"_index":254,"title":{},"content":{"18":{"position":[[241,7]]}},"keywords":{}}],["учитыва",{"_index":394,"title":{},"content":{"33":{"position":[[361,9]]}},"keywords":{}}],["уязвим",{"_index":37,"title":{},"content":{"4":{"position":[[85,10]]}},"keywords":{}}],["файл",{"_index":172,"title":{"19":{"position":[[38,6]]}},"content":{"13":{"position":[[653,4]]},"15":{"position":[[158,5]]},"17":{"position":[[109,4]]},"18":{"position":[[139,4],[714,5]]},"56":{"position":[[1799,4]]}},"keywords":{}}],["факторн",{"_index":412,"title":{},"content":{"34":{"position":[[180,9]]}},"keywords":{}}],["фасад",{"_index":974,"title":{},"content":{"81":{"position":[[267,6]]}},"keywords":{}}],["финальн",{"_index":1086,"title":{},"content":{"92":{"position":[[4395,9],[4969,9]]}},"keywords":{}}],["фич",{"_index":76,"title":{},"content":{"7":{"position":[[32,5]]},"62":{"position":[[1726,4]]},"71":{"position":[[1428,4]]}},"keywords":{}}],["форм",{"_index":858,"title":{},"content":{"68":{"position":[[992,6]]}},"keywords":{}}],["формат",{"_index":745,"title":{},"content":{"58":{"position":[[135,7]]}},"keywords":{}}],["формирова",{"_index":546,"title":{},"content":{"46":{"position":[[153,11]]}},"keywords":{}}],["формирован",{"_index":452,"title":{"66":{"position":[[0,12]]}},"content":{"38":{"position":[[33,12],[247,12]]},"45":{"position":[[8,12]]},"46":{"position":[[753,12]]},"52":{"position":[[843,12]]},"53":{"position":[[1222,12],[1498,12],[2121,12]]},"54":{"position":[[204,12]]},"57":{"position":[[719,12],[1112,12]]},"60":{"position":[[69,12]]},"61":{"position":[[19,12]]},"62":{"position":[[733,12],[1009,12]]},"64":{"position":[[450,12]]},"92":{"position":[[1328,12]]},"94":{"position":[[83,12]]}},"keywords":{}}],["фреймворк",{"_index":23,"title":{},"content":{"2":{"position":[[131,10]]}},"keywords":{}}],["функц",{"_index":1020,"title":{"87":{"position":[[18,7]]}},"content":{},"keywords":{}}],["функциона",{"_index":436,"title":{},"content":{"36":{"position":[[389,11]]},"67":{"position":[[72,10],[347,12]]},"78":{"position":[[367,12]]}},"keywords":{}}],["функционал",{"_index":845,"title":{},"content":{"68":{"position":[[156,11],[428,11]]}},"keywords":{}}],["функционалабизнес",{"_index":434,"title":{},"content":{"36":{"position":[[338,17]]}},"keywords":{}}],["функционалперманентн",{"_index":841,"title":{},"content":{"67":{"position":[[302,22]]}},"keywords":{}}],["хвата",{"_index":391,"title":{},"content":{"33":{"position":[[264,7]]}},"keywords":{}}],["хран",{"_index":39,"title":{"57":{"position":[[12,8]]}},"content":{"4":{"position":[[120,6]]},"57":{"position":[[108,7]]},"77":{"position":[[18,8]]}},"keywords":{}}],["хранен",{"_index":558,"title":{},"content":{"46":{"position":[[449,8],[630,8]]},"57":{"position":[[802,8]]}},"keywords":{}}],["хранилищ",{"_index":191,"title":{},"content":{"13":{"position":[[1067,10]]}},"keywords":{}}],["централизова",{"_index":422,"title":{},"content":{"36":{"position":[[59,17]]},"46":{"position":[[613,16],[714,16]]},"53":{"position":[[2082,16]]},"57":{"position":[[784,17]]},"65":{"position":[[333,15]]}},"keywords":{}}],["циклическ",{"_index":576,"title":{},"content":{"47":{"position":[[511,11]]}},"keywords":{}}],["част",{"_index":409,"title":{},"content":{"33":{"position":[[767,6]]},"36":{"position":[[332,5]]},"49":{"position":[[379,6]]},"64":{"position":[[1369,5]]},"87":{"position":[[52,6]]}},"keywords":{}}],["чего/к",{"_index":913,"title":{},"content":{"74":{"position":[[79,6]]}},"keywords":{}}],["чекбокс",{"_index":854,"title":{},"content":{"68":{"position":[[895,7]]}},"keywords":{}}],["чему?"",{"_index":914,"title":{},"content":{"74":{"position":[[86,12]]}},"keywords":{}}],["чита",{"_index":12,"title":{},"content":{"1":{"position":[[121,7]]},"17":{"position":[[1102,5]]},"70":{"position":[[261,7]]}},"keywords":{}}],["чтен",{"_index":917,"title":{},"content":{"74":{"position":[[189,6]]},"89":{"position":[[13,6]]}},"keywords":{}}],["шаблон",{"_index":151,"title":{},"content":{"13":{"position":[[66,6]]}},"keywords":{}}],["эд",{"_index":377,"title":{},"content":{"33":{"position":[[21,3]]},"34":{"position":[[21,3]]}},"keywords":{}}],["экспортирова",{"_index":268,"title":{},"content":{"18":{"position":[[520,15]]}},"keywords":{}}],["этап",{"_index":309,"title":{},"content":{"20":{"position":[[175,5]]}},"keywords":{}}],["явля",{"_index":271,"title":{},"content":{"18":{"position":[[548,8]]},"49":{"position":[[370,8]]},"57":{"position":[[330,8],[1207,8]]},"64":{"position":[[380,8]]},"67":{"position":[[12,8],[263,9]]},"71":{"position":[[94,8]]},"73":{"position":[[75,8]]},"87":{"position":[[43,8]]}},"keywords":{}}]],"pipeline":["stemmer","stemmer-ru"]} \ No newline at end of file diff --git a/search-doc-1717664714026.json b/search-doc-1717664714026.json deleted file mode 100644 index 75bd02d..0000000 --- a/search-doc-1717664714026.json +++ /dev/null @@ -1 +0,0 @@ -{"searchDocs":[{"title":"Issues","type":0,"sectionRef":"#","url":"/guides/docs/issues","content":"Issues Предложения по изменению документации или добавлению новых правил принимают либо на доске Frontend.Shared, либо через PR на Github.","keywords":"","version":"Next"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/intro","content":"Intro Архитектура и стандартные фичи, описанные в документации, должны быть использованы при проектировании frontend в Астрал-Софт.","keywords":"","version":"Next"},{"title":"Вдохновлено ABAC и XAML","type":0,"sectionRef":"#","url":"/guides/docs/permissions/core","content":"","keywords":"","version":"Next"},{"title":"На клиенте нужен ABAC, даже если на бэкенде RBAC​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#на-клиенте-нужен-abac-даже-если-на-бэкенде-rbac","content":" В этой статье вы можете прочитать чем концептуально отличаются ABAC (Attribute-Based Access Control) и RBAC (Role Based Access Control). На Frontend'е нужна такая система доступов, которая однозначно будет указывать на предмет блокировок доступов в контексте пользовательского интерфейса. RBAC и даже ABAC, имплементированный на стороне API не будет зависеть от UI, который привносит свою дополнительную специфичность при расчете доступов. В связи с этим, на клиенте необходимо перманентно использовать ABAC, доступы которого будут напрямую связаны со специфичностью UI. ","version":"Next","tagName":"h2"},{"title":"Пример с RBAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-rbac-на-бэкенде","content":" Предметная область ЭДО Роли PaymentAccountFreeAccount Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если у него есть созданная организация. Проблема Из требования видно, что для вычисления доступа не хватает только одного знания о роле пользователя (роль PaymentAccount), необходимо дополнительно учитывать есть у пользователя организация. Неверное решение Добавить к кнопке дополнительный if на проверку организации. Это приведет к "размазыванию" логики доступов по приложению и последующую потерю контроля. Правильное решение Использование ABAC с permission docActions, который внутри будет проверять роль пользователя и наличие организации.docActions будет использоваться в необходимых частях приложения для проверки доступа к действиям на документом. ","version":"Next","tagName":"h3"},{"title":"Пример с ABAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-abac-на-бэкенде","content":" Предметная область ЭДО Permissions с API docActions Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если он прошел двух факторную аутентификацию. Проблема В docActions на бэкенде проверяется оплачен ли аккаунт пользователя, но проверку на 2FA можно провести только в runtime при нажатии на саму кнопку. Решение Добавить в едином клиентском сервисе доступов дополнительную логику для docActions, которая будет проверять 2FA. ","version":"Next","tagName":"h3"},{"title":"Пример реализации паттерна","type":0,"sectionRef":"#","url":"/guides/docs/permissions/example","content":"","keywords":"","version":"Next"},{"title":"Permissions Module​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#permissions-module","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions ","version":"Next","tagName":"h2"},{"title":"Policies​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#policies","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/policies ","version":"Next","tagName":"h2"},{"title":"Reasons​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#reasons","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/enums.ts ","version":"Next","tagName":"h2"},{"title":"Rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#rules","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/rules ","version":"Next","tagName":"h2"},{"title":"Использование rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-rules","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore/PaymentPolicyStore.ts#L33 ","version":"Next","tagName":"h3"},{"title":"Использование permissions в UIStore​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-permissions-в-uistore","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/books/features/BookList/UIStore/UIStore.ts#L76 ","version":"Next","tagName":"h2"},{"title":"Подготовка данных​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#подготовка-данных","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/application/app.tsx#L44 ","version":"Next","tagName":"h2"},{"title":"Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#route-guards","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/features/routeGuards ","version":"Next","tagName":"h2"},{"title":"Использование Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-route-guards","content":" admin pagebook reading page ","version":"Next","tagName":"h3"},{"title":"Feature Toggle и Permissions","type":0,"sectionRef":"#","url":"/guides/docs/permissions/featureToggle","content":"","keywords":"","version":"Next"},{"title":"Permissions может использовать Feature Toggle​","type":1,"pageTitle":"Feature Toggle и Permissions","url":"/guides/docs/permissions/featureToggle#permissions-может-использовать-feature-toggle","content":" Permissions может использовать Feature Toggle только в том случае, если Feature Toggle предоставляет Permissioning Toggles. В противном случае Feature Toggle должен использоваться отдельно от Permissions. ","version":"Next","tagName":"h2"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/permissions/intro","content":"","keywords":"","version":"Next"},{"title":"Необходимо применять когда​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#необходимо-применять-когда","content":" В системе уже реализована какая-либо система доступов без централизованного управления на клиентеAPI предоставляет сведения о ролях. Паттерн работает в связке с ролевой модельюAPI предоставляет сведения о доступах. Паттерн расширяет на клиенте доступы, полученные из APIНа клиенте необходимо по условию (любому) закрывать доступ к части функционалаБизнес-требования описывают доступность функционала при определенных условиях (роль, сведения об оплате...) ","version":"Next","tagName":"h2"},{"title":"Применение паттерна позволяет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#применение-паттерна-позволяет","content":" Уменьшить затраты на разработку системы доступовИметь единую реализацию системы доступов во всех приложениях компанииЦентрализованно развивать паттернИзбежать повторения одних и тех же ошибок реализации в разных приложениях ","version":"Next","tagName":"h2"},{"title":"Паттерн предоставляет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#паттерн-предоставляет","content":" Удобный и поддерживаемый способ формирования доступов на клиентеСистему причин отказа в доступе. Позволяет улучшить UX и DX при работе с доступами: пользователь и разработчик получают конкретную причину отказа в доступеПодход загрузки данных для формирования доступовЗакрытие рутов приложения (RouteGuards)Взаимодействие с другими сервисами. Например, FeatureToggle ","version":"Next","tagName":"h2"},{"title":"Готовый пакет @astral/permissions​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#готовый-пакет-astralpermissions","content":" Для более простой поддержки паттерна был реализован пакет @astral/permissions, который используется в примерах данной документации. ","version":"Next","tagName":"h2"},{"title":"2FA (Two-factor Auth)","type":0,"sectionRef":"#","url":"/guides/docs/permissions/2fa","content":"","keywords":"","version":"Next"},{"title":"Пример​","type":1,"pageTitle":"2FA (Two-factor Auth)","url":"/guides/docs/permissions/2fa#пример","content":" Требования Создание документа доступно только администратору с активной 2FA. Реализация modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, private readonly twoFA: TwoFAService, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { // Если twoFA не пройдена, то отказываем в доступе с причиной, которая будет обработана в features // Также, по необходимости, можно вызвать логику запроса от пользователя прохождения 2FA if (!twoFA.isPassed) { return deny(PermissionDenialReason.TwoFA); } if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor( private readonly permissions: PermissionsStore, private readonly twoFA: TwoFAService, private readonly notifyService: Notify, private readonly router: Router, ) { makeAutoObservable(this, {}, { autoBind: true }); } public openDocCreation = () => { const permission = this.permissions.administration.administrationActions; if (permission.isAllowed) { this.router.push(APP_ROUTES.createDoc.getRedirectPath()); return; } if (permission.hasReason(PermissionDenialReason.NoAdmin)) { this.notifyService.error( 'Доступно только администратору' ); return; } if (permission.hasReason(PermissionDenialReason.TwoFA)) { // Здесь можно, например, реализовать открытие модалки для 2FA this.notifyService.error( 'Нужно пройти 2FA', ); return; } this.notifyService.error( 'Добавить документ на полку нельзя. Попробуйте сменить аккаунт', ); }; } ","version":"Next","tagName":"h2"},{"title":"Единый Permissions Module","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsModule","content":"","keywords":"","version":"Next"},{"title":"Состав permissions модуля​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#состав-permissions-модуля","content":" Логика формирования доступовТипы доступных в приложении доступовПричины отказа в доступахЛогика блокировки рутов приложения ","version":"Next","tagName":"h2"},{"title":"Причины концентрации логики доступов в одном модуле​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#причины-концентрации-логики-доступов-в-одном-модуле","content":" Контроль доступов приложения в одной точкеРасчет доступов, в большинстве случаев, связан с данными, которые необходимо получать из других модулей. Если формировать доступы на уровне конкретного модуля, то возникнет нежелательное зацепление между модулямиДоступы, мнимо относящиеся к разным модулям, будут использованы в других модулях, что также породит нежелательное зацеплениеПравила, позволяющие вычислять доступы, должны быть переиспользованы. Хранение правил в одном модуле позволит избежать зацепления модулейПричины отказа в доступе и логика для расчета доступов должна использоваться между доступами. Не централизованное хранение причин отказа и логики приведен к высокому зацеплению в системеВозможность централизованной подготовки данных для формирования базовых доступов ","version":"Next","tagName":"h2"},{"title":"Пример с нежелательным зацеплением​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#пример-с-нежелательным-зацеплением","content":" Требования Кнопка "Добавить документ" доступна только если есть подключенная организацияКнопка "Удалить организацию" доступна только если в рамках данной организации не было создано документов Решение с зацеплением Модуль docs реализует доступ docActions, который импортирует логику из модуля organization для проверки данных об организации. Модуль organization реализует доступ deletingOrganization, который импортирует логику из модуля docs для проверки данных о документах. Получаем циклическую зависимость и зацепление между модулями. Решение без зацепления Модуль permissions содержит доступы docActions и deletingOrganization, импортируя логику из модулей docs и organization. Модуль docs и organization теперь не зацеплены между собой. ","version":"Next","tagName":"h3"},{"title":"Reasons. Причины отказа в доступе","type":0,"sectionRef":"#","url":"/guides/docs/permissions/reasons","content":"","keywords":"","version":"Next"},{"title":"Пример использования​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#пример-использования","content":" Требования Пользователь не может добавить книгу на свою полку, если: Аккаунт не оплаченПревышено доступное количество книг, которое можно добавить на полку Если у пользователя не оплачен аккаунт, то при нажатии на кнопку "Добавить на полку" должна открыться модалка с предложением об оплате. Если пользователь достиг предел добавленных книг на полку, то необходимо отобразить уведомление "Достигнуто максимальное количество книг на полке". Решение modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicy // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } modules/books/features/BookCard/UIStore // В реальном коде для импорта из другого модуля необходимо использовать external файл import { PermissionDenialReason, PermissionsStore, permissionsStore, } from '@example/modules/permissions'; export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this, {}, { autoBind: true }); } public addToShelf = () => { if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${this.bookId} добавлена на полку`); return; } if (this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.NoPay)) { this.openPaymentAccount(); return; } if ( this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.ExceedReadingCount) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } export const createUIStore = (bookId: string) => new UIStore(bookId, permissionsStore, notify); modules/books/features/BookCard/BookCard.tsx type Props = { id: string; }; export const BookCard = observer(({ id }: Props) => { const [{ addToShelf, isOpenPayAccount, closePayAccount }] = useState(() => createUIStore(id)); return ( <> <Container> <BookInfo /> <Button onClick={addToShelf}>Добавить на полку</Button> </Container> <PayAccountModal isOpen={isOpenPayAccount} onClose={closePayAccount} /> </> ); }); ","version":"Next","tagName":"h2"},{"title":"Все reasons хранятся в одном enum​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#все-reasons-хранятся-в-одном-enum","content":" Одни и те же причины отказа переиспользуются между разными permissions и policies. Все reasons необходимо хранить в одном enum для того, чтобы не создавать дополнительные сложности декомпозиции при росте причин. Reasons должны располагаться в modules/permissions/domain/enums.ts: export enum PermissionDenialReason { /** * Не является администратором * **/ NoAdmin = 'no-admin', /** * Аккаунт не оплачен * **/ NoPayAccount = 'no-pay-account', } Пакет @astral/permissions содержит дополнительные системные причины отказа, которые могут произойти из-за ошибок в коде: export enum SystemDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = 'internal-error', /** * Недостаточно данных для формирования доступа * **/ MissingData = 'missing-data', } Для централизованного хранения reasons, необходимо объединить SystemDenialReason и reasons нашего модуля: import { SystemDenialReason } from '@astral/permissions'; export enum PermissionsDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = SystemDenialReason.InternalError, /** * Недостаточно данных для формирования доступа * **/ MissingData = SystemDenialReason.MissingData, /** * Пользователь не является админом * **/ NoAdmin = 'no-admin', } ","version":"Next","tagName":"h2"},{"title":"Соглашения​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#соглашения","content":" Для каждого reason должен быть оставлен комментарий в виде jsdoc о предназначении данного reasonЗначения reasons должны быть String в формате kebab-case ","version":"Next","tagName":"h2"},{"title":"Policies. Политики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/policies","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#местоположение","content":" Все политики находятся в директории policies: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | | |── AdministrationPolicyStore/ | | | | | |── BooksPolicyStore/ | | | | | |── PaymentPolicyStore/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts Policies являются частью имплементации PermissionStore, поэтому находятся внутри него. ","version":"Next","tagName":"h2"},{"title":"Создание политик​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#создание-политик","content":" ","version":"Next","tagName":"h2"},{"title":"Политики напрямую связаны с модулями системы​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#политики-напрямую-связаны-с-модулями-системы","content":" Modules - это предметные подобласти предметной области проекта. Permissions внутри policies работают в рамках предметных подобласть проекта, поэтому policies должны соответствовать названию modules. Примеры Permission administrationActions концептуально относится к модулю administration, поэтому создается AdministrationPolicyPermission readingBook концептуально относится к модулю books, поэтому создается BooksPolicy ","version":"Next","tagName":"h3"},{"title":"Пример создания с использованием @astral/permissions​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#пример-создания-с-использованием-astralpermissions","content":" modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager.createPolicy создает политику, которая позволит в дальнейшем создавать permissions this.policy = this.policyManager.createPolicy({ name: 'administration', // Метод для подготовки данных необходимых для формирования доступов AdministrationPolicy prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } } ","version":"Next","tagName":"h3"},{"title":"Доступ к политикам через единую точку PermissionsStore​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#доступ-к-политикам-через-единую-точку-permissionsstore","content":" PermissionsStore - это singleton и единая входная точка в приложении для получения информации о доступах. Другие модули приложения взаимодействуют именно с PermissionStore. Пример реализации: import { makeAutoObservable } from 'mobx'; import { billingRepository, userRepository } from '@example/data'; import type { BillingRepository, UserRepository } from '@example/data'; // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; import { createAdministrationPolicyStore, createBooksPolicyStore, createPaymentPolicyStore, } from './policies'; import type { AdministrationPolicyStore, BooksPolicyStore, PaymentPolicyStore, } from './policies'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } // singleton export const permissionsStore = new PermissionsStore( billingRepository, userRepository, ); Пример использования: export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } Мотивация Возможность централизованной подготовки данных для формирования permissionsВозможность реализации логирования для дебагингаУвеличение DX за счет отказа от необходимо импорта разных policies ","version":"Next","tagName":"h2"},{"title":"Переиспользование логики между policies​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#переиспользование-логики-между-policies","content":" Policies не должны зависеть друг от друга и соответственно переиспользовать permissions потому. Переиспользование permissions между policies приводит к пересечению бизнес требований и запутанной логике формирования доступов. Если между policies необходимо переиспользовать логику, то надо использовать rules. ","version":"Next","tagName":"h2"},{"title":"Формирование доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsFormation","content":"","keywords":"","version":"Next"},{"title":"Как выделять permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#как-выделять-permission","content":" Требование является permission, если: Требование указывает на то, что функционал приложения должен быть ограничен на основе данных об аккаунте (роль, организация, оплата...)Описанное ограничение может быть снято при изменении данных пользователя Permission не является: Временный Feature Toggle на функционалПерманентное условие на блокировку функционала, без возможности открытия доступа (даже при изменении роли пользователя)Условия (if) в коде, реализующие рядовые бизнес требования ","version":"Next","tagName":"h2"},{"title":"Примеры требований​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#примеры-требований","content":" Кнопка "Создать документ" доступна только администратору - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если изменить роль пользователя. Кнопка "Редактировать документ" доступна только для пользователей с платным аккаунтом и добавленной организацией - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если оплатить аккаунт и добавить организацию. Кнопка "Создать документ" заблокирована до 20.05.2024 - это не permission, а feature toggle. Требование не зависит от данных пользователя. При этом: Кнопка "Создать документ" для пользователей с тарифом "Базовый" заблокирована до 20.05.2024 - это уже permission потому, что основывается на данных пользователя. Кнопка "Отправить" заблокирована, если чекбокс "Ознакомлен с требованиями" не активен - это не permission. Это требование для формы. ","version":"Next","tagName":"h3"},{"title":"Создание permissions посредством @astral/permissions​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#создание-permissions-посредством-astralpermissions","content":" Permissions создаются только внутри policy с помощью метода policy.createPermission: modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { // разрешает доступ return allow(); } // запрещает доступ с конкретной причиной deny(PermissionDenialReason.NoAdmin); }); } } ","version":"Next","tagName":"h2"},{"title":"API Permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#api-permission","content":" createPermission возвращает объект вида: type Permission = { isAllowed: boolean; /** * Причина отказа в доступе */ reason?: string; /** * @example permission.hasReason(DenialReason.NoAdmin) */ hasReason: (reason: string) => boolean; }; О причинах отказа читайте далее. ","version":"Next","tagName":"h3"},{"title":"Пример реализации и использования permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример-реализации-и-использования-permission","content":" Требования Кнопка "Создать книгу" в Sidebar отображается только если пользователь является администратором. Решение modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore class AdministrationPolicyStore { constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } В features необходимо избегать разрешения доступов через абстрактные компоненты вида: import { observer } from 'mobx-react-lite'; import { permissionsStore } from '@example/modules/permissions'; export const Sidebar = observer(() => { return ( <Sidebar> <PermissionsGateway permission={permissionsStore.administration.administrationActions} allow={ <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> } /> </Sidebar> ); }); Использование компонентов вроде PermissionsGateway переносит логику доступов для фичи в UI слой, что нарушает архитектурную концепцию. Разрешение доступов должно происходить в UIStore: modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } modules/layout/features/MainLayout/Sidebar/Sidebar.tsx export const Sidebar = observer(() => { const [{ isAllowedBookCreation }] = useState(createUIStore); return ( <Sidebar> <SidebarItem> {isAllowedBookCreation && ( <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> )} </SidebarItem> </Sidebar> ); }); ","version":"Next","tagName":"h2"},{"title":"Permission не должен зависеть от UI​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#permission-не-должен-зависеть-от-ui","content":" Permission не должен напрямую зависеть и указывать на UI, который блокируется. Зависимость от UI приведет к взрывному росту permissions и в последствии к сложной поддержке кода. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример","content":" Кнопка "Создать документ" отображается только если пользователь является администратором - в данном требовании присутствует указать на конкретную кнопку. Неправильное решение​ Создать permission showCreationDocButton: class AdministrationPolicyStore { ... public get showCreationDocButton() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get allowAdministrationRoute() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get showEditingDocModal() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Как видно из примера, при связывании permission и UI происходит взрывной рост одинаковых доступов: Доступ к кнопкеДоступ к рутуДоступ к модалке редактирования Правильное решение​ Создать абстрактный permission administrationActions, который будет закрывать доступ к действиям администратора: class AdministrationPolicyStore { ... public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Теперь на уровне features необходимо проверять administrationActions и на основе его выполнять необходимые действия. ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг","content":" Название permission должно отвечать на вопрос: "Доступ открыт/закрыт для чего/к чему?". Примеры Доступ закрыт к действиям администратора - administrationActionsДоступ закрыт к чтению книги онлайн - readingBookДоступ закрыт к управлению организацией - organizationManagement ✅ Valid public get administrationActions() { ... } public get addingToShelf() { ... } public get readingBook() { ... } public get organizationManagement() { ... } ❌ Invalid public get canReadingBook() { ... } public get isAddToShelf() { ... } ","version":"Next","tagName":"h2"},{"title":"Нейминг методов для вычисления доступов​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг-методов-для-вычисления-доступов","content":" Для методов, которые вычисляют доступы, добавляется префикс calc. ✅ Valid public calcReadingBook = (bookId: string) => { ... } ❌ Invalid public checkReadingBook = (bookId: string) => { ... } ","version":"Next","tagName":"h3"},{"title":"Rules. Переиспользование логики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/rules","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#местоположение","content":" Все правила находятся в директории rules: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | ├── rules/ | | | | | |── calcAcceptableAge/ | | | | | |── calcAccountPayment/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Rules - приватные функции модуля permissions​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#rules---приватные-функции-модуля-permissions","content":" Rules недоступны вне permissions модуля и являются частью имплементации PermissionsStore. ","version":"Next","tagName":"h2"},{"title":"Реализация rules​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#реализация-rules","content":" Rules создаются с помощью createRule из пакета @astral/permissions: ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#пример","content":" Требования Чтение книги доступно только если возраст пользователя соответствует доступному возрасту, указанному в книгеПокупка товара доступна только если возраст пользователя соответствует доступному возрасту, указанному в товаре Решение Требуется реализовать два permissions: calcReadingBook и calcPayment. Оба permissions должны реализовать одну и ту же логику проверки возраста пользователя. Необходимо реализовать rule: calcAcceptableAge: modules/permissions/domain/stores/PermissionsStore/rules/calcAcceptableAge // @astral/permissions в реальном коде необходимо реэкспортировать через shared import { createRule } from '@astral/permissions'; export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if (getDateYearDiff(new Date(userBirthday), new Date()) < acceptableAge) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); Далее PaymentPolicyStore и BooksPolicyStore используют calcAcceptableAge для вычисления доступов: modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicyStore import { calcAcceptableAge } from '../../rules'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность прочитать книгу онлайн */ public calcReadingOnline = (acceptableAge?: number) => { return this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } const billingInfo = this.billingRepo.getBillingInfoQuery().data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } allow(); }); }; } ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#нейминг","content":" Все rules имеют префикс calc. ✅ Valid /** * Вычислить админские доступы */ const calcAdminPermissions = (role: string) => {...}; /** * Вычислить доступность возраста */ const calcAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ❌ Invalid const checkAdminRole = (role: string) => {...}; const checkAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ","version":"Next","tagName":"h2"},{"title":"Подготовка данных для доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/preparingData","content":"","keywords":"","version":"Next"},{"title":"Каждая policy указывает какие данные нужны для доступов​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#каждая-policy-указывает-какие-данные-нужны-для-доступов","content":" Каждая policy определяет метод подготовки данных, которые нужны для формирования запросов. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#пример","content":" В BooksPolicy для формирования доступа addingToShelf требуются данные из UserRepository и BillingRepository. При создании policy необходимо указать как получить эти данные: // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', // prepareData будет вызван одновременно с другими policy посредством policyManager prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } ","version":"Next","tagName":"h3"},{"title":"PermissionsStore.prepareData подготовит данные для всех policy​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#permissionsstorepreparedata-подготовит-данные-для-всех-policy","content":" PermissionsStore должен иметь метод prepareData, который вызовет подготовку данных в каждом policy: // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } За подготовку данных отвечает PolicyManagerStore. PolicyManagerStore регистрирует для каждого policy метод подготовки prepareDataи при вызове policyManager.prepareData запускает вызов каждой prepareData каждого policy Мотивация использования единого метода подготовки данных Выбран подход использования единого метода для загрузки данных для того, чтобы соблюдать баланс между сложностью использования и оптимизацией загрузки данных: Если вызывать для каждой policy или для каждого permission отдельный метод загрузки данных, то все фичи приложения, использующие доступы, должны будут быть обернуты в ContentStateНеобходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения ","version":"Next","tagName":"h2"},{"title":"Использование​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#использование","content":" PermissionsStore.prepareData необходимо вызывать в application слое приложения: application/app.tsx export const App = observer(() => { const renderRoutes = useRoutes(routes); const permissionsStatus = permissionsStore.preparingDataStatus; useEffect(() => { permissionsStore.prepareData(); authStore.addProtectedHttpClients([apiHttpClient]); }, []); return ( <ThemeProvider theme={theme}> <NotificationContainer /> <ContentState isError={permissionsStatus.isError} isLoading={permissionsStatus.isLoading} errorState={{ errorList: [permissionsStatus.error], onRetry: permissionsStore.prepareData, }} > <MainLayout>{renderRoutes}</MainLayout> </ContentState> </ThemeProvider> ); }); Не рекомендуется рендерить приложение, пока данные для permissions не будут успешно подготовлены. ","version":"Next","tagName":"h3"},{"title":"Оптимизация PermissionsStore.prepareData​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#оптимизация-permissionsstorepreparedata","content":" Необходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения. Запросы могут использоваться в prepareData, если: Запрашиваемые данные нужны для рендеринга приложения не только в PermissionsStoreЗапрашиваемые данные значительно не влияют на блокировку рендера приложения Если запросы являются не оптимальными для использования в PermissionsStore, то для формирования permissions необходимо использовать методы, принимающие на вход данные: import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } В таком случае за получение данных будет ответственна та часть приложения, которая будет использовать permission: modules/books/features/BookCard/UIStore export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, private readonly booksRepo: BooksRepository ) { makeAutoObservable(this, {}, { autoBind: true }); } private get bookByIdQuery() { return this.booksRepo.getBookByIdQuery(this.bookId); } public buy = () => { const payPermission = this.permissions.calcPayment(this.bookByIdQuery.acceptableAge); if (payPermission.isAllowed) { this.notifyService.success(`Книга ${bookId} оплачена`); return; } if (payPermission.hasReason(PermissionDenialReason.NotAcceptAge)) { this.notifyService.error('Вы слишком молоды'); return; } this.notifyService.error( 'Купить книгу нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } ","version":"Next","tagName":"h2"},{"title":"Обработка проблем получения данных​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#обработка-проблем-получения-данных","content":" Если перед использованием permissions в features, не были успешно загружены данные, то permissions будут возвращать объект с конкретным reason: type DenialMissingDataPermission = { isAllowed: false; reason: PermissionDenialReason.MissingData; }; Reason PermissionDenialReason.MissingData можно будет при необходимости обработать централизованно или на месте использования permissions. ","version":"Next","tagName":"h2"},{"title":"Route Guards. Доступы к рутам приложения","type":0,"sectionRef":"#","url":"/guides/docs/permissions/routes","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#местоположение","content":" Все Route Guards хранятся в modules/permissions/features/routeGuards: ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Guard вызывается для каждой page​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#guard-вызывается-для-каждой-page","content":" Route Guard должен вызываться на каждой page, которая должна быть защищена доступами. МотивацияВызов Route Guard для каждого page позволяет достичь простоты поддержки. При исследовании pages сразу видна связь страницы и доступов. Использование конфигурации с описанием доступных рутов в модуле permissions значительно усложняет понимание кода и простоту поддержки функционала. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример","content":" Необходимо закрыть pages: admin/createBookbook/reading ├── application/ | ├── pages/ | | ├── admin/ | | | ├── createBook.tsx | | ├── book/ | | | ├── reading.tsx ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; application/pages/book/reading.tsx import { NotFoundScreen, ReadingBookScreen } from '@example/screens'; import { useRouterParams } from '@example/shared'; import { ReadingBookRouteGuard } from '@example/modules/permissions'; const ReadingBookPage = () => { const { id } = useRouterParams(); if (!id) { return <NotFoundScreen title="Книга не найдена" />; } return ( <ReadingBookRouteGuard id={id}> <ReadingBookScreen id={id} /> </ReadingBookRouteGuard> ); }; export default ReadingBookPage; ","version":"Next","tagName":"h3"},{"title":"Вложенные страницы​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#вложенные-страницы","content":" Использование Route Guard для каждой страницы создает небольшой overhead: для каждой вложенной страницы необходимо вызывать Route Guard, возможности закрыть всю вложенность нет. Данное ограничение принимается в угоду более простой поддержки. ","version":"Next","tagName":"h3"},{"title":"Создание Route Guard​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#создание-route-guard","content":" В modules/permissions/features/routeGuards необходимо создать Route Guard, который будет закрывать конкретную страницу или ряд страниц. Реализация зависит от требований. Все Route Guard создаются на основе абстрактного PermissionRouteGuard. PermissionRouteGuard - фасад, позволяющий упростить реализацию Route Guards и обработать стандартные причины отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-1","content":" Требования Страница создания книги (admin/createBook) должна быть доступна только администратору. Реализация В AdministrationPolicy уже реализован permissions - administrationActions, на основе которого можно делать вывод доступна ли пользователю страница создания книги. На момент реализации, все вложенные руты в /admin подходят под administrationActions permission, поэтому реализуем единый для всех /admin/ Guard: modules/permissions/features/routeGuards/AdminRouteGuard import type { ReactNode } from 'react'; import { observer } from 'mobx-react-lite'; import { PageLayout, Placeholder } from '@example/shared'; import { PermissionDenialReason, permissionsStore } from '../../../domain'; import { PermissionGuard } from '../../PermissionGuard'; type Props = { children: ReactNode; }; export const AdminRouteGuard = observer(({ children }: Props) => { return ( <PermissionGuard permission={permissionsStore.administration.administrationActions} denialSwitch={{ [PermissionDenialReason.NoAdmin]: ( <PageLayout header={{ title: 'Панель администратора' }} content={{ children: ( <Placeholder title="Доступно только для администраторов" /> ), }} /> ), }} > {children} </PermissionGuard> ); }); denialSwitch позволяет обработать причины отказа. В данном случае, если причина отказа 'no-admin', то необходимо показать соответствующий Placeholder. Закрывает требуемую страницу приложения: application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; ","version":"Next","tagName":"h3"},{"title":"Обработка дефолтных причин отказа в доступе​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#обработка-дефолтных-причин-отказа-в-доступе","content":" В PermissionRouteGuard можно обработать дефолтные причины для отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-2","content":" import { Placeholder } from '@example/shared'; import type { Permission } from '../../domain'; import { PermissionDenialReason } from '../../domain'; type Props = { permission: Permission; /** * Позволяет отрендерить компонент для конкретной причины отказа в доступе */ denialSwitch: Record<string, ReactNode>; children: ReactNode; }; /** * Закрывает доступ к children, обрабатывает дефолтные причины отказа */ export const PermissionGuard = ({ permission, denialSwitch, children, }: Props) => { if (permission.isAllowed) { return children; } if (denialSwitch[permission.reason]) { return denialSwitch[permission.reason]; } if (permission.reason === PermissionDenialReason.NoPayAccount) { return <Placeholder title="Необходимо оплатить аккаунт" />; } if (permission.reason === PermissionDenialReason.MissingUserAge) { return <Placeholder title="Необходимо заполнить дату рождения в ЛК" />; } return <Placeholder title="Нет доступа" />; }; ","version":"Next","tagName":"h3"},{"title":"Принципы тестирования доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/testing","content":"","keywords":"","version":"Next"},{"title":"Алгоритм покрытия Policy тестами​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#алгоритм-покрытия-policy-тестами","content":" Пример policy: export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } На каждый permission, определенный в policy, необходимо писать тесты. Для каждого permission необходимо создавать отдельный describe​ describe('AdministrationPolicyStore', () => { describe('Добавление книги на полку', () => {}); }); Для каждого permission необходимо обработать положительные и отрицательные кейсы​ Формирование кейсов происходит в соответствии с вызовом allow и deny в коде: public get addingToShelf() { return this.policy.createPermission((allow, deny) => { // Тест-кейс: Доступно администратору if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; // Тест-кейс: Недоступно, если аккаунт не оплачен if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } // Тест-кейс: Недоступно, если превышено количество добавлений if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Тест-кейс: Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке allow(); }); } Реализуемые тест-кейсы: describe('BooksPolicyStore', () => { describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); it('Недоступно, если аккаунт не оплачен', async () => {}); it('Недоступно, если превышено количество добавлений', async () => {}); it('Недоступно, если достигнуто максимальное количество добавлений', async () => {}); it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => {}); }); }); Перед началом выполнения теста необходимо всегда вызывать prepareData​ PolicyManagerStore поддерживает асинхронный вызов prepareData - prepareDataAsync. describe('BooksPolicyStore', () => { const setup = async ({ isAdmin, billingInfo, }: { isAdmin: boolean; billingInfo?: Partial<BillingRepositoryDTO.BillingInfo>; }) => { const policyManager = createPolicyManagerStore(); const cacheService = createCacheService(); const userRepoMock = mock<UserRepository>({ getRolesQuery: () => cacheService.createQuery(['roles'], async () => ({ isAdmin, })), }); const billingRepoMock = mock<BillingRepository>({ getBillingInfoQuery: () => cacheService.createQuery(['billing'], async () => billingRepositoryFaker.makeBillingInfo(billingInfo), ), }); const sut = new BooksPolicyStore( policyManager, billingRepoMock, userRepoMock, ); await policyManager.prepareDataAsync(); return { sut }; }; describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); }); }); Если не вызвать prepareData, то все доступы будут недоступны. При тестировании отказа в доступе, необходимо проверять reason​ Тест-кейс Недоступно, если аккаунт не оплачен должен считаться пройденным только если reason соответствует PermissionDenialReason.NoPayAccount: it('Недоступно, если аккаунт не оплачен', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: false }, }); expect(sut.addingToShelf.isAllowed).toBeFalsy(); expect(sut.addingToShelf.reason).toBe( PermissionDenialReason.NoPayAccount, ); }); Финальный вызов allow или deny должен обрабатываться одним тест-кейсом​ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Этот allow будет иметь один тест-кейс allow(); }); } Финальный вызов allow или deny должен аккумулировать условия, которые не описаны в коде: it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: true, info: billingRepositoryFaker.makeBillingDetails({ shelf: { currentCount: 1, allowedCount: 2 }, }), }, }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); Мотивация Позволяет избежать роста количества тест-кейсов. ","version":"Next","tagName":"h2"},{"title":"Тестирование Rules​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-rules","content":" При тестировании rules необходимо: Покрыть тестами положительные и отрицательные сценарии. Допустима группировкаПри тестировании отказа в доступе проверять reasonПоследний вызов allow или deny покрывать один тест-кейсом export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if ( Math.abs(getDateYearDiff(new Date(userBirthday), new Date())) < acceptableAge ) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); describe('calcAcceptableAge', () => { describe('Доступа нет', () => { it('Если нет данных о доступном возрасте', () => { const permission = calcAcceptableAge(); expect(permission.isAllowed).toBeFalsy(); expect(permission.reason).toBe(PermissionDenialReason.MissingData); }); it('Если у пользователя не заполнена дата рождения', () => {}); it('Если возраст пользователя не соответствует допустимому', () => {}); }); it('Доступ открыт, если есть доступный возраст + день рождения пользователя и возраст соответствует допустимому', () => {}); }); ","version":"Next","tagName":"h2"},{"title":"Тестирование UIStore, использующего permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-uistore-использующего-permissions","content":" Пример: Реализованный UIStore использует permissions.books.addingToShelf. Логика формирования addingToShelf уже протестирована в permissions module, поэтому в UIStore необходимо протестировать только реакцию на разрешение и отказ в доступе: export class UIStore { public isOpenAccountPayment = false; constructor( private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this); } public addToShelf = (bookId: string) => { // Тест-кейс: Показывает информационное уведомление, если книга была успешно добавлена if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${bookId} добавлена на полку`); return; } // Тест-кейс: Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.NoPayAccount, ) ) { this.openPaymentAccount(); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.ExceedReadingCount, ) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPaymentAccount = () => { this.isOpenAccountPayment = true; }; public closePaymentAccount = () => { this.isOpenAccountPayment = false; }; } Реализуемые тест-кейсы: describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { it('Показывает информационное уведомление, если книга была успешно добавлена', () => {}); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => {}); it('Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений', () => {}); it('Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа', () => {}); }); }); ","version":"Next","tagName":"h2"},{"title":"Мок permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#мок-permissions","content":" Для подмены permissions необходимо использовать mockDeep из библиотеки vitest-mock-extended и createDenialPermission из @astral/permissions: import { mockDeep } from 'vitest-mock-extended'; import { createAllowedPermission, createDenialPermission } from '@astral/permissions'; describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { const setup = (permissionsStoreMock: PermissionsStore) => { const notifyMock = mock<Notify>(); const sut = new UIStore(permissionsStoreMock, notifyMock); sut.addToShelf('id'); return { notifyMock, sut }; }; it('Показывает информационное уведомление, если книга была успешно добавлена', () => { // permissionsStoreMock делает addingToShelf доступным const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createAllowedPermission(), }, }); const { notifyMock } = setup(permissionsStoreMock); expect(notifyMock.info).toBeCalledWith('Книга id добавлена на полку'); }); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => { // permissionsStoreMock делает addingToShelf недоступным с причиной NoPayAccount const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createDenialPermission( PermissionDenialReason.NoPayAccount, ), }, }); const { sut } = setup(permissionsStoreMock); expect(sut.isOpenAccountPayment).toBeTruthy(); }); }); }); ","version":"Next","tagName":"h3"}],"options":{"languages":["en","ru"],"id":"default"}} \ No newline at end of file diff --git a/search-doc-1717675066773.json b/search-doc-1717675066773.json new file mode 100644 index 0000000..7659168 --- /dev/null +++ b/search-doc-1717675066773.json @@ -0,0 +1 @@ +{"searchDocs":[{"title":"Работа с env в архитектуре","type":0,"sectionRef":"#","url":"/guides/docs/env/arch","content":"","keywords":"","version":"Next"},{"title":"ConfigService​","type":1,"pageTitle":"Работа с env в архитектуре","url":"/guides/docs/env/arch#configservice","content":" Слои приложения, отличные от application, должны получать данные из env через ConfigService. Подробнее о ConfigService читайте в документации. ","version":"Next","tagName":"h2"},{"title":"Nextjs. SSR и SSG","type":0,"sectionRef":"#","url":"/guides/docs/env/ssr","content":"Nextjs. SSR и SSG Если на проекте используется Nextjs, то необходимо использовать тот механизм работы с env, который предоставляет фреймворк. При SSR и SSG env нужны при билде.","keywords":"","version":"Next"},{"title":"Безопасность. Использование PUBLIC и PRIVATE env","type":0,"sectionRef":"#","url":"/guides/docs/env/safety","content":"","keywords":"","version":"Next"},{"title":"Мотивация​","type":1,"pageTitle":"Безопасность. Использование PUBLIC и PRIVATE env","url":"/guides/docs/env/safety#мо�тивация","content":" Если все env переменные сделать доступные в браузере, то злоумышленники могут найти уязвимости системы потому, что env хранит информацию о сервере, на котором запускает билд или само приложение. Именно по этой причине Nextjs и Vite требуют для env переменных префиксы: NEXT_PUBLIC | NEXT_PRIVATE, VITE_. ","version":"Next","tagName":"h2"},{"title":"CSR​","type":1,"pageTitle":"Безопасность. Использование PUBLIC и PRIVATE env","url":"/guides/docs/env/safety#csr","content":" Если приложение собирается через webpack, то достаточно просто следовать указанным ранее соглашениям по именованию. Если приложение собирается через vite, то необходимо использовать envPrefix для кастомизации префикса. ","version":"Next","tagName":"h2"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/env/intro","content":"Intro Раздел содержит: Как работать с env в рамках единой архитектурыКак генерировать и загружать env в CSR (Client Side Rendering)","keywords":"","version":"Next"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/intro","content":"Intro Архитектура и стандартные фичи, описанные в документации, должны быть использованы при проектировании frontend в Астрал-Софт.","keywords":"","version":"Next"},{"title":"Issues","type":0,"sectionRef":"#","url":"/guides/docs/issues","content":"Issues Предложения по изменению документации или добавлению новых правил принимают либо на доске Frontend.Shared, либо через PR на Github.","keywords":"","version":"Next"},{"title":"CSR + Nginx. Динамические env","type":0,"sectionRef":"#","url":"/guides/docs/env/csr","content":"","keywords":"","version":"Next"},{"title":"Пример​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#пример","content":" Пример реализован в vite-boilerplate. ","version":"Next","tagName":"h2"},{"title":"Проблема получения env в build time​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#проблема-получения-env-в-build-time","content":" Получение env в build time - это классический подход. Работает следующим образом: Сборщик при запуске получаетЛибо помещает полученные env в import.meta.env (vite), либо делает replace process.env переменных на их значения непосредственно в js коде (webpack)Переменные доступны в браузере при выполнении js Проблемы: Для изменения значений env необходимо заново пересобирать приложениеЕсли в приложении есть поддержка white label, то для каждого бренда необходимо собирать отдельный docker image. Это сильно увеличивает время сборки приложения и количество ресурсов, необходимое для поддержки и развертывания Для решения описанных проблем необходимо делать inject env в html при запуске docker контейнера. ","version":"Next","tagName":"h2"},{"title":"Генерация index.html и inject env​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml-и-inject-env","content":" Для того чтобы при изменении env переменных не приходилось заново делать сборку, необходимо при запуске docker контейнера генерировать index.html и инжектировать в html env переменные. ","version":"Next","tagName":"h2"},{"title":"Генерация index.html из index.template.html​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml-из-indextemplatehtml","content":" В репозитории должен находиться только index.template.html - это шаблон html, на основе которого будет построен index.html. index.html должен быть добавлен в .gitignore. Содержимое index.template.html​ Пример index.template.html index.template.html содержит всю необходимую для приложения разметку и <script> в <head>: <script> <!-- При запуске dev команды или запуске docker контейнера в __ENV__ подставятся значения из окружения --> window.__ENV__={}; </script> Зачем нужен index.template.html и почему index.html в .gitignore?​ При запуске dev-server должно происходить inject env переменных в index.html, если файл не будет в .gitignore, то в репозиторий могут случайно попасть изменения, которых разработчик не делал. Для генерации и inject env используются bash скрипты.​ Bash используется по причине того, что для CSR в компании используется Nginx. Это означает, что в итоговом docker контейнере нет nodejs, а если добавить в образ nodejs, то он вырастет в разы по объему, что повлияет на скорость сборок и оптимизацию хранилища. ","version":"Next","tagName":"h3"},{"title":"Dev Mode​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#dev-mode","content":" ","version":"Next","tagName":"h2"},{"title":"Генерация index.html. generateEnv.dev.sh скрипт​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml-generateenvdevsh-скрипт","content":" Пример generateEnv.dev.sh В режиме разработки необходимо, чтобы перед каждым запуском dev-server выполнялся bash скрипт, который: Парсит все переменные из файла .env.local (или .env.dev) с префиксами PUBLIC_Создает в директории для раздачи статики index.html с копией содержимого из index.template.html. Для vite директория для раздачи статики - это корень приложения. Для webpack - public директорияЗаменяет в index.html window.__ENV__={} на: window.__ENV__={"PUBLIC_API_URL":"https://astral.ru"}; ","version":"Next","tagName":"h3"},{"title":"Prod Mode​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#prod-mode","content":" ","version":"Next","tagName":"h2"},{"title":"Генерация index.html​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml","content":" Dockerfile​ При запуске docker контейнера необходимо запускать bash скрипт, который сгенерирует index.html файл и инжектирует в него env. Для этого в Dockerfile необходимо добавить команду выполнения скрипта при запуске контейнера: FROM node:22-alpine AS build WORKDIR /usr/src/app COPY package.json package-lock.json* ./ COPY . . RUN npm i --production RUN npm run build FROM fholzer/nginx-brotli:v1.19.1 COPY .nginx/nginx.conf.template /etc/nginx/nginx.conf.template COPY --from=build /usr/src/app/dist /usr/share/nginx/html # Запускаем контейнер при помощи exec в shell оболочке, чтобы иметь доступ к env ENTRYPOINT ["sh", "/usr/share/nginx/html/scripts/startup.prod.sh"] Скрипт startup.prod.sh​ Пример startup.prod.sh Скрипт startup.prod.sh выполняет следующие действия: Достает из текущего окружения все env переменные с префиксом PUBLIC_Создает index.html с копией содержимого из index.template.htmlЗаменяет в index.html window.__ENV__={} на: window.__ENV__={"PUBLIC_API_URL":"https://astral.ru"}; Подменяет переменные для nginx на их значения. Читай об этом подробнее здесьЗапускает nginx ","version":"Next","tagName":"h3"},{"title":"Подстановка переменных в nginx​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#подстановка-переменных-в-nginx","content":" В зависимости от env в проекте может изменяться nginx.conf. Для того чтобы nginx.conf менялся при запуске необходимо: Создать в проекте файл nginx.conf.template. Из него будет генерироваться уже настоящий nginx.conf.Заменить динамические участки конфига на ${PUBLIC_WS_URL}. Пример: http { ... server { listen 80; listen [::]:80; ... add_header Content-Security-Policy connect-src 'self' ${PUBLIC_WS_URL}; ... } } Добавить в startup.prod.sh следующий код с переменными, которые необходимо подменить: # Необходимо экспортировать, тк envsubst является разветвленным процессом и не знает неэкспортируемых переменных export PUBLIC_WS_URL # Подмена указанных переменных в nginx.conf.template и копирование всего файла в nginx.conf envsubst "${PUBLIC_WS_URL}" < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf При запуске startup.prod.sh подменит в nginx.conf.template все переменные на их значения и создаст nginx.conf, который и будет использовать для запуска nginx ","version":"Next","tagName":"h3"},{"title":"Использование env из сгенерированного файла​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#использование-env-из-сгенерированного-файла","content":" Для использования переменных необходимо определить тип для window.__ENV__ в global.d.ts: interface Window { __ENV__: { PUBLIC_API_URL: string; PUBLIC_SENTRY_DSN: string; PUBLIC_SENTRY_ENV: string; PUBLIC_RELEASE_TAG: string; }; } В браузере доступ к env переменным осуществляется через window.__ENV__ в application слое приложения: configService.init({ apiUrl: window.__ENV__.PUBLIC_API_URL, monitoringDsn: window.__ENV__.PUBLIC_SENTRY_DSN, monitoringStand: window.__ENV__.PUBLIC_SENTRY_ENV, monitoringRelease: window.__ENV__.PUBLIC_RELEASE_TAG, }); ","version":"Next","tagName":"h2"},{"title":"Преимущества inject env в index.html​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#преимущества-inject-env-в-indexhtml","content":" Inject env позволяет: Получать env в браузере синхронно. Нет необходимости делать обработку асинхронного получения данных. Код приложения гарантированно получает все env на этапе выполненияСнизить к 0 затраты на загрузку динамических env ","version":"Next","tagName":"h2"},{"title":"Пример реализации паттерна","type":0,"sectionRef":"#","url":"/guides/docs/permissions/example","content":"","keywords":"","version":"Next"},{"title":"Permissions Module​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#permissions-module","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions ","version":"Next","tagName":"h2"},{"title":"Policies​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#policies","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/policies ","version":"Next","tagName":"h2"},{"title":"Reasons​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#reasons","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/enums.ts ","version":"Next","tagName":"h2"},{"title":"Rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#rules","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/rules ","version":"Next","tagName":"h2"},{"title":"Использование rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-rules","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore/PaymentPolicyStore.ts#L33 ","version":"Next","tagName":"h3"},{"title":"Использование permissions в UIStore​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-permissions-в-uistore","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/books/features/BookList/UIStore/UIStore.ts#L76 ","version":"Next","tagName":"h2"},{"title":"Подготовка данных​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#подготовка-данных","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/application/app.tsx#L44 ","version":"Next","tagName":"h2"},{"title":"Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#route-guards","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/features/routeGuards ","version":"Next","tagName":"h2"},{"title":"Использование Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-route-guards","content":" admin pagebook reading page ","version":"Next","tagName":"h3"},{"title":"Вдохновлено ABAC и XAML","type":0,"sectionRef":"#","url":"/guides/docs/permissions/core","content":"","keywords":"","version":"Next"},{"title":"На клиенте нужен ABAC, даже если на бэкенде RBAC​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#на-клиенте-нужен-abac-даже-если-на-бэкенде-rbac","content":" В этой статье вы можете прочитать чем концептуально отличаются ABAC (Attribute-Based Access Control) и RBAC (Role Based Access Control). На Frontend'е нужна такая система доступов, которая однозначно будет указывать на предмет блокировок доступов в контексте пользовательского интерфейса. RBAC и даже ABAC, имплементированный на стороне API не будет зависеть от UI, который привносит свою дополнительную специфичность при расчете доступов. В связи с этим, на клиенте необходимо перманентно использовать ABAC, доступы которого будут напрямую связаны со специфичностью UI. ","version":"Next","tagName":"h2"},{"title":"Пример с RBAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-rbac-на-бэкенде","content":" Предметная область ЭДО Роли PaymentAccountFreeAccount Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если у него есть созданная организация. Проблема Из требования видно, что для вычисления доступа не хватает только одного знания о роле пользователя (роль PaymentAccount), необходимо дополнительно учитывать есть у пользователя организация. Неверное решение Добавить к кнопке дополнительный if на проверку организации. Это приведет к "размазыванию" логики доступов по приложению и последующую потерю контроля. Правильное решение Использование ABAC с permission docActions, который внутри будет проверять роль пользователя и наличие организации.docActions будет использоваться в необходимых частях приложения для проверки доступа к действиям на документом. ","version":"Next","tagName":"h3"},{"title":"Пример с ABAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-abac-на-бэкенде","content":" Предметная область ЭДО Permissions с API docActions Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если он прошел двух факторную аутентификацию. Проблема В docActions на бэкенде проверяется оплачен ли аккаунт пользователя, но проверку на 2FA можно провести только в runtime при нажатии на саму кнопку. Решение Добавить в едином клиентском сервисе доступов дополнительную логику для docActions, которая будет проверять 2FA. ","version":"Next","tagName":"h3"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/permissions/intro","content":"","keywords":"","version":"Next"},{"title":"Необходимо применять когда​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#необходимо-применять-когда","content":" В системе уже реализована какая-либо система доступов без централизованного управления на клиентеAPI предоставляет сведения о ролях. Паттерн работает в связке с ролевой модельюAPI предоставляет сведения о доступах. Паттерн расширяет на клиенте доступы, полученные из APIНа клиенте необходимо по условию (любому) закрывать доступ к части функционалаБизнес-требования описывают доступность функционала при определенных условиях (роль, сведения об оплате...) ","version":"Next","tagName":"h2"},{"title":"Применение паттерна позволяет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#применение-паттерна-позволяет","content":" Уменьшить затраты на разработку системы доступовИметь единую реализацию системы доступов во всех приложениях компанииЦентрализованно развивать паттернИзбежать повторения одних и тех же ошибок реализации в разных приложениях ","version":"Next","tagName":"h2"},{"title":"Паттерн предоставляет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#паттерн-предоставляет","content":" Удобный и поддерживаемый способ формирования доступов на клиентеСистему причин отказа в доступе. Позволяет улучшить UX и DX при работе с доступами: пользователь и разработчик получают конкретную причину отказа в доступеПодход загрузки данных для формирования доступовЗакрытие рутов приложения (RouteGuards)Взаимодействие с другими сервисами. Например, FeatureToggle ","version":"Next","tagName":"h2"},{"title":"Готовый пакет @astral/permissions​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#готовый-пакет-astralpermissions","content":" Для более простой поддержки паттерна был реализован пакет @astral/permissions, который используется в примерах данной документации. ","version":"Next","tagName":"h2"},{"title":"Feature Toggle и Permissions","type":0,"sectionRef":"#","url":"/guides/docs/permissions/featureToggle","content":"","keywords":"","version":"Next"},{"title":"Permissions может использовать Feature Toggle​","type":1,"pageTitle":"Feature Toggle и Permissions","url":"/guides/docs/permissions/featureToggle#permissions-может-использовать-feature-toggle","content":" Permissions может использовать Feature Toggle только в том случае, если Feature Toggle предоставляет Permissioning Toggles. В противном случае Feature Toggle должен использоваться отдельно от Permissions. ","version":"Next","tagName":"h2"},{"title":"2FA (Two-factor Auth)","type":0,"sectionRef":"#","url":"/guides/docs/permissions/2fa","content":"","keywords":"","version":"Next"},{"title":"Пример​","type":1,"pageTitle":"2FA (Two-factor Auth)","url":"/guides/docs/permissions/2fa#пример","content":" Требования Создание документа доступно только администратору с активной 2FA. Реализация modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, private readonly twoFA: TwoFAService, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { // Если twoFA не пройдена, то отказываем в доступе с причиной, которая будет обработана в features // Также, по необходимости, можно вызвать логику запроса от пользователя прохождения 2FA if (!twoFA.isPassed) { return deny(PermissionDenialReason.TwoFA); } if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor( private readonly permissions: PermissionsStore, private readonly twoFA: TwoFAService, private readonly notifyService: Notify, private readonly router: Router, ) { makeAutoObservable(this, {}, { autoBind: true }); } public openDocCreation = () => { const permission = this.permissions.administration.administrationActions; if (permission.isAllowed) { this.router.push(APP_ROUTES.createDoc.getRedirectPath()); return; } if (permission.hasReason(PermissionDenialReason.NoAdmin)) { this.notifyService.error( 'Доступно только администратору' ); return; } if (permission.hasReason(PermissionDenialReason.TwoFA)) { // Здесь можно, например, реализовать открытие модалки для 2FA this.notifyService.error( 'Нужно пройти 2FA', ); return; } this.notifyService.error( 'Добавить документ на полку нельзя. Попробуйте сменить аккаунт', ); }; } ","version":"Next","tagName":"h2"},{"title":"Единый Permissions Module","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsModule","content":"","keywords":"","version":"Next"},{"title":"Состав permissions модуля​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#состав-permissions-модуля","content":" Логика формирования доступовТипы доступных в приложении доступовПричины отказа в доступахЛогика блокировки рутов приложения ","version":"Next","tagName":"h2"},{"title":"Причины концентрации логики доступов в одном модуле​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#причины-концентрации-логики-доступов-в-одном-модуле","content":" Контроль доступов приложения в одной точкеРасчет доступов, в большинстве случаев, связан с данными, которые необходимо получать из других модулей. Если формировать доступы на уровне конкретного модуля, то возникнет нежелательное зацепление между модулямиДоступы, мнимо относящиеся к разным модулям, будут использованы в других модулях, что также породит нежелательное зацеплениеПравила, позволяющие вычислять доступы, должны быть переиспользованы. Хранение правил в одном модуле позволит избежать зацепления модулейПричины отказа в доступе и логика для расчета доступов должна использоваться между доступами. Не централизованное хранение причин отказа и логики приведен к высокому зацеплению в системеВозможность централизованной подготовки данных для формирования базовых доступов ","version":"Next","tagName":"h2"},{"title":"Пример с нежелательным зацеплением​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#пример-с-нежелательным-зацеплением","content":" Требования Кнопка "Добавить документ" доступна только если есть подключенная организацияКнопка "Удалить организацию" доступна только если в рамках данной организации не было создано документов Решение с зацеплением Модуль docs реализует доступ docActions, который импортирует логику из модуля organization для проверки данных об организации. Модуль organization реализует доступ deletingOrganization, который импортирует логику из модуля docs для проверки данных о документах. Получаем циклическую зависимость и зацепление между модулями. Решение без зацепления Модуль permissions содержит доступы docActions и deletingOrganization, импортируя логику из модулей docs и organization. Модуль docs и organization теперь не зацеплены между собой. ","version":"Next","tagName":"h3"},{"title":"Policies. Политики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/policies","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#местоположение","content":" Все политики находятся в директории policies: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | | |── AdministrationPolicyStore/ | | | | | |── BooksPolicyStore/ | | | | | |── PaymentPolicyStore/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts Policies являются частью имплементации PermissionStore, поэтому находятся внутри него. ","version":"Next","tagName":"h2"},{"title":"Создание политик​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#создание-политик","content":" ","version":"Next","tagName":"h2"},{"title":"Политики напрямую связаны с модулями системы​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#политики-напрямую-связаны-с-модулями-системы","content":" Modules - это предметные подобласти предметной области проекта. Permissions внутри policies работают в рамках предметных подобласть проекта, поэтому policies должны соответствовать названию modules. Примеры Permission administrationActions концептуально относится к модулю administration, поэтому создается AdministrationPolicyPermission readingBook концептуально относится к модулю books, поэтому создается BooksPolicy ","version":"Next","tagName":"h3"},{"title":"Пример создания с использованием @astral/permissions​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#пример-создания-с-использованием-astralpermissions","content":" modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager.createPolicy создает политику, которая позволит в дальнейшем создавать permissions this.policy = this.policyManager.createPolicy({ name: 'administration', // Метод для подготовки данных необходимых для формирования доступов AdministrationPolicy prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } } ","version":"Next","tagName":"h3"},{"title":"Доступ к политикам через единую точку PermissionsStore​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#доступ-к-политикам-через-единую-точку-permissionsstore","content":" PermissionsStore - это singleton и единая входная точка в приложении для получения информации о доступах. Другие модули приложения взаимодействуют именно с PermissionStore. Пример реализации: import { makeAutoObservable } from 'mobx'; import { billingRepository, userRepository } from '@example/data'; import type { BillingRepository, UserRepository } from '@example/data'; // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; import { createAdministrationPolicyStore, createBooksPolicyStore, createPaymentPolicyStore, } from './policies'; import type { AdministrationPolicyStore, BooksPolicyStore, PaymentPolicyStore, } from './policies'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } // singleton export const permissionsStore = new PermissionsStore( billingRepository, userRepository, ); Пример использования: export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } Мотивация Возможность централизованной подготовки данных для формирования permissionsВозможность реализации логирования для дебагингаУвеличение DX за счет отказа от необходимо импорта разных policies ","version":"Next","tagName":"h2"},{"title":"Переиспользование логики между policies​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#переиспользование-логики-между-policies","content":" Policies не должны зависеть друг от друга и соответственно переиспользовать permissions потому. Переиспользование permissions между policies приводит к пересечению бизнес требований и запутанной логике формирования доступов. Если между policies необходимо переиспользовать логику, то надо использовать rules. ","version":"Next","tagName":"h2"},{"title":"Reasons. Причины отказа в доступе","type":0,"sectionRef":"#","url":"/guides/docs/permissions/reasons","content":"","keywords":"","version":"Next"},{"title":"Пример использования​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#пример-использования","content":" Требования Пользователь не может добавить книгу на свою полку, если: Аккаунт не оплаченПревышено доступное количество книг, которое можно добавить на полку Если у пользователя не оплачен аккаунт, то при нажатии на кнопку "Добавить на полку" должна открыться модалка с предложением об оплате. Если пользователь достиг предел добавленных книг на полку, то необходимо отобразить уведомление "Достигнуто максимальное количество книг на полке". Решение modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicy // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } modules/books/features/BookCard/UIStore // В реальном коде для импорта из другого модуля необходимо использовать external файл import { PermissionDenialReason, PermissionsStore, permissionsStore, } from '@example/modules/permissions'; export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this, {}, { autoBind: true }); } public addToShelf = () => { if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${this.bookId} добавлена на полку`); return; } if (this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.NoPay)) { this.openPaymentAccount(); return; } if ( this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.ExceedReadingCount) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } export const createUIStore = (bookId: string) => new UIStore(bookId, permissionsStore, notify); modules/books/features/BookCard/BookCard.tsx type Props = { id: string; }; export const BookCard = observer(({ id }: Props) => { const [{ addToShelf, isOpenPayAccount, closePayAccount }] = useState(() => createUIStore(id)); return ( <> <Container> <BookInfo /> <Button onClick={addToShelf}>Добавить на полку</Button> </Container> <PayAccountModal isOpen={isOpenPayAccount} onClose={closePayAccount} /> </> ); }); ","version":"Next","tagName":"h2"},{"title":"Все reasons хранятся в одном enum​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#все-reasons-хранятся-в-одном-enum","content":" Одни и те же причины отказа переиспользуются между разными permissions и policies. Все reasons необходимо хранить в одном enum для того, чтобы не создавать дополнительные сложности декомпозиции при росте причин. Reasons должны располагаться в modules/permissions/domain/enums.ts: export enum PermissionDenialReason { /** * Не является администратором * **/ NoAdmin = 'no-admin', /** * Аккаунт не оплачен * **/ NoPayAccount = 'no-pay-account', } Пакет @astral/permissions содержит дополнительные системные причины отказа, которые могут произойти из-за ошибок в коде: export enum SystemDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = 'internal-error', /** * Недостаточно данных для формирования доступа * **/ MissingData = 'missing-data', } Для централизованного хранения reasons, необходимо объединить SystemDenialReason и reasons нашего модуля: import { SystemDenialReason } from '@astral/permissions'; export enum PermissionsDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = SystemDenialReason.InternalError, /** * Недостаточно данных для формирования доступа * **/ MissingData = SystemDenialReason.MissingData, /** * Пользователь не является админом * **/ NoAdmin = 'no-admin', } ","version":"Next","tagName":"h2"},{"title":"Соглашения​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#соглашения","content":" Для каждого reason должен быть оставлен комментарий в виде jsdoc о предназначении данного reasonЗначения reasons должны быть String в формате kebab-case ","version":"Next","tagName":"h2"},{"title":"Подготовка данных для доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/preparingData","content":"","keywords":"","version":"Next"},{"title":"Каждая policy указывает какие данные нужны для доступов​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#каждая-policy-указывает-какие-данные-нужны-для-доступов","content":" Каждая policy определяет метод подготовки данных, которые нужны для формирования запросов. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#пример","content":" В BooksPolicy для формирования доступа addingToShelf требуются данные из UserRepository и BillingRepository. При создании policy необходимо указать как получить эти данные: // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', // prepareData будет вызван одновременно с другими policy посредством policyManager prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } ","version":"Next","tagName":"h3"},{"title":"PermissionsStore.prepareData подготовит данные для всех policy​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#permissionsstorepreparedata-подготовит-данные-для-всех-policy","content":" PermissionsStore должен иметь метод prepareData, который вызовет подготовку данных в каждом policy: // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } За подготовку данных отвечает PolicyManagerStore. PolicyManagerStore регистрирует для каждого policy метод подготовки prepareDataи при вызове policyManager.prepareData запускает вызов каждой prepareData каждого policy Мотивация использования единого метода подготовки данных Выбран подход использования единого метода для загрузки данных для того, чтобы соблюдать баланс между сложностью использования и оптимизацией загрузки данных: Если вызывать для каждой policy или для каждого permission отдельный метод загрузки данных, то все фичи приложения, использующие доступы, должны будут быть обернуты в ContentStateНеобходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения ","version":"Next","tagName":"h2"},{"title":"Использование​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#использование","content":" PermissionsStore.prepareData необходимо вызывать в application слое приложения: application/app.tsx export const App = observer(() => { const renderRoutes = useRoutes(routes); const permissionsStatus = permissionsStore.preparingDataStatus; useEffect(() => { permissionsStore.prepareData(); authStore.addProtectedHttpClients([apiHttpClient]); }, []); return ( <ThemeProvider theme={theme}> <NotificationContainer /> <ContentState isError={permissionsStatus.isError} isLoading={permissionsStatus.isLoading} errorState={{ errorList: [permissionsStatus.error], onRetry: permissionsStore.prepareData, }} > <MainLayout>{renderRoutes}</MainLayout> </ContentState> </ThemeProvider> ); }); Не рекомендуется рендерить приложение, пока данные для permissions не будут успешно подготовлены. ","version":"Next","tagName":"h3"},{"title":"Оптимизация PermissionsStore.prepareData​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#оптимизация-permissionsstorepreparedata","content":" Необходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения. Запросы могут использоваться в prepareData, если: Запрашиваемые данные нужны для рендеринга приложения не только в PermissionsStoreЗапрашиваемые данные значительно не влияют на блокировку рендера приложения Если запросы являются не оптимальными для использования в PermissionsStore, то для формирования permissions необходимо использовать методы, принимающие на вход данные: import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } В таком случае за получение данных будет ответственна та часть приложения, которая будет использовать permission: modules/books/features/BookCard/UIStore export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, private readonly booksRepo: BooksRepository ) { makeAutoObservable(this, {}, { autoBind: true }); } private get bookByIdQuery() { return this.booksRepo.getBookByIdQuery(this.bookId); } public buy = () => { const payPermission = this.permissions.calcPayment(this.bookByIdQuery.acceptableAge); if (payPermission.isAllowed) { this.notifyService.success(`Книга ${bookId} оплачена`); return; } if (payPermission.hasReason(PermissionDenialReason.NotAcceptAge)) { this.notifyService.error('Вы слишком молоды'); return; } this.notifyService.error( 'Купить книгу нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } ","version":"Next","tagName":"h2"},{"title":"Обработка проблем получения данных​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#обработка-проблем-получения-данных","content":" Если перед использованием permissions в features, не были успешно загружены данные, то permissions будут возвращать объект с конкретным reason: type DenialMissingDataPermission = { isAllowed: false; reason: PermissionDenialReason.MissingData; }; Reason PermissionDenialReason.MissingData можно будет при необходимости обработать централизованно или на месте использования permissions. ","version":"Next","tagName":"h2"},{"title":"Формирование доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsFormation","content":"","keywords":"","version":"Next"},{"title":"Как выделять permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#как-выделять-permission","content":" Требование является permission, если: Требование указывает на то, что функционал приложения должен быть ограничен на основе данных об аккаунте (роль, организация, оплата...)Описанное ограничение может быть снято при изменении данных пользователя Permission не является: Временный Feature Toggle на функционалПерманентное условие на блокировку функционала, без возможности открытия доступа (даже при изменении роли пользователя)Условия (if) в коде, реализующие рядовые бизнес требования ","version":"Next","tagName":"h2"},{"title":"Примеры требований​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#примеры-требований","content":" Кнопка "Создать документ" доступна только администратору - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если изменить роль пользователя. Кнопка "Редактировать документ" доступна только для пользователей с платным аккаунтом и добавленной организацией - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если оплатить аккаунт и добавить организацию. Кнопка "Создать документ" заблокирована до 20.05.2024 - это не permission, а feature toggle. Требование не зависит от данных пользователя. При этом: Кнопка "Создать документ" для пользователей с тарифом "Базовый" заблокирована до 20.05.2024 - это уже permission потому, что основывается на данных пользователя. Кнопка "Отправить" заблокирована, если чекбокс "Ознакомлен с требованиями" не активен - это не permission. Это требование для формы. ","version":"Next","tagName":"h3"},{"title":"Создание permissions посредством @astral/permissions​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#создание-permissions-посредством-astralpermissions","content":" Permissions создаются только внутри policy с помощью метода policy.createPermission: modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { // разрешает доступ return allow(); } // запрещает доступ с конкретной причиной deny(PermissionDenialReason.NoAdmin); }); } } ","version":"Next","tagName":"h2"},{"title":"API Permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#api-permission","content":" createPermission возвращает объект вида: type Permission = { isAllowed: boolean; /** * Причина отказа в доступе */ reason?: string; /** * @example permission.hasReason(DenialReason.NoAdmin) */ hasReason: (reason: string) => boolean; }; О причинах отказа читайте далее. ","version":"Next","tagName":"h3"},{"title":"Пример реализации и использования permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример-реализации-и-использования-permission","content":" Требования Кнопка "Создать книгу" в Sidebar отображается только если пользователь является администратором. Решение modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore class AdministrationPolicyStore { constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } В features необходимо избегать разрешения доступов через абстрактные компоненты вида: import { observer } from 'mobx-react-lite'; import { permissionsStore } from '@example/modules/permissions'; export const Sidebar = observer(() => { return ( <Sidebar> <PermissionsGateway permission={permissionsStore.administration.administrationActions} allow={ <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> } /> </Sidebar> ); }); Использование компонентов вроде PermissionsGateway переносит логику доступов для фичи в UI слой, что нарушает архитектурную концепцию. Разрешение доступов должно происходить в UIStore: modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } modules/layout/features/MainLayout/Sidebar/Sidebar.tsx export const Sidebar = observer(() => { const [{ isAllowedBookCreation }] = useState(createUIStore); return ( <Sidebar> <SidebarItem> {isAllowedBookCreation && ( <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> )} </SidebarItem> </Sidebar> ); }); ","version":"Next","tagName":"h2"},{"title":"Permission не должен зависеть от UI​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#permission-не-должен-зависеть-от-ui","content":" Permission не должен напрямую зависеть и указывать на UI, который блокируется. Зависимость от UI приведет к взрывному росту permissions и в последствии к сложной поддержке кода. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример","content":" Кнопка "Создать документ" отображается только если пользователь является администратором - в данном требовании присутствует указать на конкретную кнопку. Неправильное решение​ Создать permission showCreationDocButton: class AdministrationPolicyStore { ... public get showCreationDocButton() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get allowAdministrationRoute() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get showEditingDocModal() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Как видно из примера, при связывании permission и UI происходит взрывной рост одинаковых доступов: Доступ к кнопкеДоступ к рутуДоступ к модалке редактирования Правильное решение​ Создать абстрактный permission administrationActions, который будет закрывать доступ к действиям администратора: class AdministrationPolicyStore { ... public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Теперь на уровне features необходимо проверять administrationActions и на основе его выполнять необходимые действия. ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг","content":" Название permission должно отвечать на вопрос: "Доступ открыт/закрыт для чего/к чему?". Примеры Доступ закрыт к действиям администратора - administrationActionsДоступ закрыт к чтению книги онлайн - readingBookДоступ закрыт к управлению организацией - organizationManagement ✅ Valid public get administrationActions() { ... } public get addingToShelf() { ... } public get readingBook() { ... } public get organizationManagement() { ... } ❌ Invalid public get canReadingBook() { ... } public get isAddToShelf() { ... } ","version":"Next","tagName":"h2"},{"title":"Нейминг методов для вычисления доступов​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг-методов-для-вычисления-доступов","content":" Для методов, которые вычисляют доступы, добавляется префикс calc. ✅ Valid public calcReadingBook = (bookId: string) => { ... } ❌ Invalid public checkReadingBook = (bookId: string) => { ... } ","version":"Next","tagName":"h3"},{"title":"Route Guards. Доступы к рутам приложения","type":0,"sectionRef":"#","url":"/guides/docs/permissions/routes","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#местоположение","content":" Все Route Guards хранятся в modules/permissions/features/routeGuards: ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Guard вызывается для каждой page​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#guard-вызывается-для-каждой-page","content":" Route Guard должен вызываться на каждой page, которая должна быть защищена доступами. МотивацияВызов Route Guard для каждого page позволяет достичь простоты поддержки. При исследовании pages сразу видна связь страницы и доступов. Использование конфигурации с описанием доступных рутов в модуле permissions значительно усложняет понимание кода и простоту поддержки функционала. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример","content":" Необходимо закрыть pages: admin/createBookbook/reading ├── application/ | ├── pages/ | | ├── admin/ | | | ├── createBook.tsx | | ├── book/ | | | ├── reading.tsx ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; application/pages/book/reading.tsx import { NotFoundScreen, ReadingBookScreen } from '@example/screens'; import { useRouterParams } from '@example/shared'; import { ReadingBookRouteGuard } from '@example/modules/permissions'; const ReadingBookPage = () => { const { id } = useRouterParams(); if (!id) { return <NotFoundScreen title="Книга не найдена" />; } return ( <ReadingBookRouteGuard id={id}> <ReadingBookScreen id={id} /> </ReadingBookRouteGuard> ); }; export default ReadingBookPage; ","version":"Next","tagName":"h3"},{"title":"Вложенные страницы​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#вложенные-страницы","content":" Использование Route Guard для каждой страницы создает небольшой overhead: для каждой вложенной страницы необходимо вызывать Route Guard, возможности закрыть всю вложенность нет. Данное ограничение принимается в угоду более простой поддержки. ","version":"Next","tagName":"h3"},{"title":"Создание Route Guard​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#создание-route-guard","content":" В modules/permissions/features/routeGuards необходимо создать Route Guard, который будет закрывать конкретную страницу или ряд страниц. Реализация зависит от требований. Все Route Guard создаются на основе абстрактного PermissionRouteGuard. PermissionRouteGuard - фасад, позволяющий упростить реализацию Route Guards и обработать стандартные причины отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-1","content":" Требования Страница создания книги (admin/createBook) должна быть доступна только администратору. Реализация В AdministrationPolicy уже реализован permissions - administrationActions, на основе которого можно делать вывод доступна ли пользователю страница создания книги. На момент реализации, все вложенные руты в /admin подходят под administrationActions permission, поэтому реализуем единый для всех /admin/ Guard: modules/permissions/features/routeGuards/AdminRouteGuard import type { ReactNode } from 'react'; import { observer } from 'mobx-react-lite'; import { PageLayout, Placeholder } from '@example/shared'; import { PermissionDenialReason, permissionsStore } from '../../../domain'; import { PermissionGuard } from '../../PermissionGuard'; type Props = { children: ReactNode; }; export const AdminRouteGuard = observer(({ children }: Props) => { return ( <PermissionGuard permission={permissionsStore.administration.administrationActions} denialSwitch={{ [PermissionDenialReason.NoAdmin]: ( <PageLayout header={{ title: 'Панель администратора' }} content={{ children: ( <Placeholder title="Доступно только для администраторов" /> ), }} /> ), }} > {children} </PermissionGuard> ); }); denialSwitch позволяет обработать причины отказа. В данном случае, если причина отказа 'no-admin', то необходимо показать соответствующий Placeholder. Закрывает требуемую страницу приложения: application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; ","version":"Next","tagName":"h3"},{"title":"Обработка дефолтных причин отказа в доступе​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#обработка-дефолтных-причин-отказа-в-доступе","content":" В PermissionRouteGuard можно обработать дефолтные причины для отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-2","content":" import { Placeholder } from '@example/shared'; import type { Permission } from '../../domain'; import { PermissionDenialReason } from '../../domain'; type Props = { permission: Permission; /** * Позволяет отрендерить компонент для конкретной причины отказа в доступе */ denialSwitch: Record<string, ReactNode>; children: ReactNode; }; /** * Закрывает доступ к children, обрабатывает дефолтные причины отказа */ export const PermissionGuard = ({ permission, denialSwitch, children, }: Props) => { if (permission.isAllowed) { return children; } if (denialSwitch[permission.reason]) { return denialSwitch[permission.reason]; } if (permission.reason === PermissionDenialReason.NoPayAccount) { return <Placeholder title="Необходимо оплатить аккаунт" />; } if (permission.reason === PermissionDenialReason.MissingUserAge) { return <Placeholder title="Необходимо заполнить дату рождения в ЛК" />; } return <Placeholder title="Нет доступа" />; }; ","version":"Next","tagName":"h3"},{"title":"Rules. Переиспользование логики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/rules","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#местоположение","content":" Все правила находятся в директории rules: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | ├── rules/ | | | | | |── calcAcceptableAge/ | | | | | |── calcAccountPayment/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Rules - приватные функции модуля permissions​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#rules---приватные-функции-модуля-permissions","content":" Rules недоступны вне permissions модуля и являются частью имплементации PermissionsStore. ","version":"Next","tagName":"h2"},{"title":"Реализация rules​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#реализация-rules","content":" Rules создаются с помощью createRule из пакета @astral/permissions: ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#пример","content":" Требования Чтение книги доступно только если возраст пользователя соответствует доступному возрасту, указанному в книгеПокупка товара доступна только если возраст пользователя соответствует доступному возрасту, указанному в товаре Решение Требуется реализовать два permissions: calcReadingBook и calcPayment. Оба permissions должны реализовать одну и ту же логику проверки возраста пользователя. Необходимо реализовать rule: calcAcceptableAge: modules/permissions/domain/stores/PermissionsStore/rules/calcAcceptableAge // @astral/permissions в реальном коде необходимо реэкспортировать через shared import { createRule } from '@astral/permissions'; export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if (getDateYearDiff(new Date(userBirthday), new Date()) < acceptableAge) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); Далее PaymentPolicyStore и BooksPolicyStore используют calcAcceptableAge для вычисления доступов: modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicyStore import { calcAcceptableAge } from '../../rules'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность прочитать книгу онлайн */ public calcReadingOnline = (acceptableAge?: number) => { return this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } const billingInfo = this.billingRepo.getBillingInfoQuery().data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } allow(); }); }; } ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#нейминг","content":" Все rules имеют префикс calc. ✅ Valid /** * Вычислить админские доступы */ const calcAdminPermissions = (role: string) => {...}; /** * Вычислить доступность возраста */ const calcAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ❌ Invalid const checkAdminRole = (role: string) => {...}; const checkAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ","version":"Next","tagName":"h2"},{"title":"Принципы тестирования доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/testing","content":"","keywords":"","version":"Next"},{"title":"Алгоритм покрытия Policy тестами​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#алгоритм-покрытия-policy-тестами","content":" Пример policy: export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } На каждый permission, определенный в policy, необходимо писать тесты. Для каждого permission необходимо создавать отдельный describe​ describe('AdministrationPolicyStore', () => { describe('Добавление книги на полку', () => {}); }); Для каждого permission необходимо обработать положительные и отрицательные кейсы​ Формирование кейсов происходит в соответствии с вызовом allow и deny в коде: public get addingToShelf() { return this.policy.createPermission((allow, deny) => { // Тест-кейс: Доступно администратору if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; // Тест-кейс: Недоступно, если аккаунт не оплачен if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } // Тест-кейс: Недоступно, если превышено количество добавлений if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Тест-кейс: Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке allow(); }); } Реализуемые тест-кейсы: describe('BooksPolicyStore', () => { describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); it('Недоступно, если аккаунт не оплачен', async () => {}); it('Недоступно, если превышено количество добавлений', async () => {}); it('Недоступно, если достигнуто максимальное количество добавлений', async () => {}); it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => {}); }); }); Перед началом выполнения теста необходимо всегда вызывать prepareData​ PolicyManagerStore поддерживает асинхронный вызов prepareData - prepareDataAsync. describe('BooksPolicyStore', () => { const setup = async ({ isAdmin, billingInfo, }: { isAdmin: boolean; billingInfo?: Partial<BillingRepositoryDTO.BillingInfo>; }) => { const policyManager = createPolicyManagerStore(); const cacheService = createCacheService(); const userRepoMock = mock<UserRepository>({ getRolesQuery: () => cacheService.createQuery(['roles'], async () => ({ isAdmin, })), }); const billingRepoMock = mock<BillingRepository>({ getBillingInfoQuery: () => cacheService.createQuery(['billing'], async () => billingRepositoryFaker.makeBillingInfo(billingInfo), ), }); const sut = new BooksPolicyStore( policyManager, billingRepoMock, userRepoMock, ); await policyManager.prepareDataAsync(); return { sut }; }; describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); }); }); Если не вызвать prepareData, то все доступы будут недоступны. При тестировании отказа в доступе, необходимо проверять reason​ Тест-кейс Недоступно, если аккаунт не оплачен должен считаться пройденным только если reason соответствует PermissionDenialReason.NoPayAccount: it('Недоступно, если аккаунт не оплачен', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: false }, }); expect(sut.addingToShelf.isAllowed).toBeFalsy(); expect(sut.addingToShelf.reason).toBe( PermissionDenialReason.NoPayAccount, ); }); Финальный вызов allow или deny должен обрабатываться одним тест-кейсом​ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Этот allow будет иметь один тест-кейс allow(); }); } Финальный вызов allow или deny должен аккумулировать условия, которые не описаны в коде: it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: true, info: billingRepositoryFaker.makeBillingDetails({ shelf: { currentCount: 1, allowedCount: 2 }, }), }, }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); Мотивация Позволяет избежать роста количества тест-кейсов. ","version":"Next","tagName":"h2"},{"title":"Тестирование Rules​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-rules","content":" При тестировании rules необходимо: Покрыть тестами положительные и отрицательные сценарии. Допустима группировкаПри тестировании отказа в доступе проверять reasonПоследний вызов allow или deny покрывать один тест-кейсом export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if ( Math.abs(getDateYearDiff(new Date(userBirthday), new Date())) < acceptableAge ) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); describe('calcAcceptableAge', () => { describe('Доступа нет', () => { it('Если нет данных о доступном возрасте', () => { const permission = calcAcceptableAge(); expect(permission.isAllowed).toBeFalsy(); expect(permission.reason).toBe(PermissionDenialReason.MissingData); }); it('Если у пользователя не заполнена дата рождения', () => {}); it('Если возраст пользователя не соответствует допустимому', () => {}); }); it('Доступ открыт, если есть доступный возраст + день рождения пользователя и возраст соответствует допустимому', () => {}); }); ","version":"Next","tagName":"h2"},{"title":"Тестирование UIStore, использующего permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-uistore-использующего-permissions","content":" Пример: Реализованный UIStore использует permissions.books.addingToShelf. Логика формирования addingToShelf уже протестирована в permissions module, поэтому в UIStore необходимо протестировать только реакцию на разрешение и отказ в доступе: export class UIStore { public isOpenAccountPayment = false; constructor( private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this); } public addToShelf = (bookId: string) => { // Тест-кейс: Показывает информационное уведомление, если книга была успешно добавлена if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${bookId} добавлена на полку`); return; } // Тест-кейс: Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.NoPayAccount, ) ) { this.openPaymentAccount(); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.ExceedReadingCount, ) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPaymentAccount = () => { this.isOpenAccountPayment = true; }; public closePaymentAccount = () => { this.isOpenAccountPayment = false; }; } Реализуемые тест-кейсы: describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { it('Показывает информационное уведомление, если книга была успешно добавлена', () => {}); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => {}); it('Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений', () => {}); it('Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа', () => {}); }); }); ","version":"Next","tagName":"h2"},{"title":"Мок permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#мок-permissions","content":" Для подмены permissions необходимо использовать mockDeep из библиотеки vitest-mock-extended и createDenialPermission из @astral/permissions: import { mockDeep } from 'vitest-mock-extended'; import { createAllowedPermission, createDenialPermission } from '@astral/permissions'; describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { const setup = (permissionsStoreMock: PermissionsStore) => { const notifyMock = mock<Notify>(); const sut = new UIStore(permissionsStoreMock, notifyMock); sut.addToShelf('id'); return { notifyMock, sut }; }; it('Показывает информационное уведомление, если книга была успешно добавлена', () => { // permissionsStoreMock делает addingToShelf доступным const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createAllowedPermission(), }, }); const { notifyMock } = setup(permissionsStoreMock); expect(notifyMock.info).toBeCalledWith('Книга id добавлена на полку'); }); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => { // permissionsStoreMock делает addingToShelf недоступным с причиной NoPayAccount const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createDenialPermission( PermissionDenialReason.NoPayAccount, ), }, }); const { sut } = setup(permissionsStoreMock); expect(sut.isOpenAccountPayment).toBeTruthy(); }); }); }); ","version":"Next","tagName":"h3"}],"options":{"languages":["en","ru"],"id":"default"}} \ No newline at end of file diff --git a/search-doc.json b/search-doc.json index 75bd02d..7659168 100644 --- a/search-doc.json +++ b/search-doc.json @@ -1 +1 @@ -{"searchDocs":[{"title":"Issues","type":0,"sectionRef":"#","url":"/guides/docs/issues","content":"Issues Предложения по изменению документации или добавлению новых правил принимают либо на доске Frontend.Shared, либо через PR на Github.","keywords":"","version":"Next"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/intro","content":"Intro Архитектура и стандартные фичи, описанные в документации, должны быть использованы при проектировании frontend в Астрал-Софт.","keywords":"","version":"Next"},{"title":"Вдохновлено ABAC и XAML","type":0,"sectionRef":"#","url":"/guides/docs/permissions/core","content":"","keywords":"","version":"Next"},{"title":"На клиенте нужен ABAC, даже если на бэкенде RBAC​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#на-клиенте-нужен-abac-даже-если-на-бэкенде-rbac","content":" В этой статье вы можете прочитать чем концептуально отличаются ABAC (Attribute-Based Access Control) и RBAC (Role Based Access Control). На Frontend'е нужна такая система доступов, которая однозначно будет указывать на предмет блокировок доступов в контексте пользовательского интерфейса. RBAC и даже ABAC, имплементированный на стороне API не будет зависеть от UI, который привносит свою дополнительную специфичность при расчете доступов. В связи с этим, на клиенте необходимо перманентно использовать ABAC, доступы которого будут напрямую связаны со специфичностью UI. ","version":"Next","tagName":"h2"},{"title":"Пример с RBAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-rbac-на-бэкенде","content":" Предметная область ЭДО Роли PaymentAccountFreeAccount Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если у него есть созданная организация. Проблема Из требования видно, что для вычисления доступа не хватает только одного знания о роле пользователя (роль PaymentAccount), необходимо дополнительно учитывать есть у пользователя организация. Неверное решение Добавить к кнопке дополнительный if на проверку организации. Это приведет к "размазыванию" логики доступов по приложению и последующую потерю контроля. Правильное решение Использование ABAC с permission docActions, который внутри будет проверять роль пользователя и наличие организации.docActions будет использоваться в необходимых частях приложения для проверки доступа к действиям на документом. ","version":"Next","tagName":"h3"},{"title":"Пример с ABAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-abac-на-бэкенде","content":" Предметная область ЭДО Permissions с API docActions Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если он прошел двух факторную аутентификацию. Проблема В docActions на бэкенде проверяется оплачен ли аккаунт пользователя, но проверку на 2FA можно провести только в runtime при нажатии на саму кнопку. Решение Добавить в едином клиентском сервисе доступов дополнительную логику для docActions, которая будет проверять 2FA. ","version":"Next","tagName":"h3"},{"title":"Пример реализации паттерна","type":0,"sectionRef":"#","url":"/guides/docs/permissions/example","content":"","keywords":"","version":"Next"},{"title":"Permissions Module​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#permissions-module","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions ","version":"Next","tagName":"h2"},{"title":"Policies​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#policies","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/policies ","version":"Next","tagName":"h2"},{"title":"Reasons​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#reasons","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/enums.ts ","version":"Next","tagName":"h2"},{"title":"Rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#rules","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/rules ","version":"Next","tagName":"h2"},{"title":"Использование rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-rules","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore/PaymentPolicyStore.ts#L33 ","version":"Next","tagName":"h3"},{"title":"Использование permissions в UIStore​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-permissions-в-uistore","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/books/features/BookList/UIStore/UIStore.ts#L76 ","version":"Next","tagName":"h2"},{"title":"Подготовка данных​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#подготовка-данных","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/application/app.tsx#L44 ","version":"Next","tagName":"h2"},{"title":"Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#route-guards","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/features/routeGuards ","version":"Next","tagName":"h2"},{"title":"Использование Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-route-guards","content":" admin pagebook reading page ","version":"Next","tagName":"h3"},{"title":"Feature Toggle и Permissions","type":0,"sectionRef":"#","url":"/guides/docs/permissions/featureToggle","content":"","keywords":"","version":"Next"},{"title":"Permissions может использовать Feature Toggle​","type":1,"pageTitle":"Feature Toggle и Permissions","url":"/guides/docs/permissions/featureToggle#permissions-может-использовать-feature-toggle","content":" Permissions может использовать Feature Toggle только в том случае, если Feature Toggle предоставляет Permissioning Toggles. В противном случае Feature Toggle должен использоваться отдельно от Permissions. ","version":"Next","tagName":"h2"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/permissions/intro","content":"","keywords":"","version":"Next"},{"title":"Необходимо применять когда​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#необходимо-применять-когда","content":" В системе уже реализована какая-либо система доступов без централизованного управления на клиентеAPI предоставляет сведения о ролях. Паттерн работает в связке с ролевой модельюAPI предоставляет сведения о доступах. Паттерн расширяет на клиенте доступы, полученные из APIНа клиенте необходимо по условию (любому) закрывать доступ к части функционалаБизнес-требования описывают доступность функционала при определенных условиях (роль, сведения об оплате...) ","version":"Next","tagName":"h2"},{"title":"Применение паттерна позволяет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#применение-паттерна-позволяет","content":" Уменьшить затраты на разработку системы доступовИметь единую реализацию системы доступов во всех приложениях компанииЦентрализованно развивать паттернИзбежать повторения одних и тех же ошибок реализации в разных приложениях ","version":"Next","tagName":"h2"},{"title":"Паттерн предоставляет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#паттерн-предоставляет","content":" Удобный и поддерживаемый способ формирования доступов на клиентеСистему причин отказа в доступе. Позволяет улучшить UX и DX при работе с доступами: пользователь и разработчик получают конкретную причину отказа в доступеПодход загрузки данных для формирования доступовЗакрытие рутов приложения (RouteGuards)Взаимодействие с другими сервисами. Например, FeatureToggle ","version":"Next","tagName":"h2"},{"title":"Готовый пакет @astral/permissions​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#готовый-пакет-astralpermissions","content":" Для более простой поддержки паттерна был реализован пакет @astral/permissions, который используется в примерах данной документации. ","version":"Next","tagName":"h2"},{"title":"2FA (Two-factor Auth)","type":0,"sectionRef":"#","url":"/guides/docs/permissions/2fa","content":"","keywords":"","version":"Next"},{"title":"Пример​","type":1,"pageTitle":"2FA (Two-factor Auth)","url":"/guides/docs/permissions/2fa#пример","content":" Требования Создание документа доступно только администратору с активной 2FA. Реализация modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, private readonly twoFA: TwoFAService, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { // Если twoFA не пройдена, то отказываем в доступе с причиной, которая будет обработана в features // Также, по необходимости, можно вызвать логику запроса от пользователя прохождения 2FA if (!twoFA.isPassed) { return deny(PermissionDenialReason.TwoFA); } if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor( private readonly permissions: PermissionsStore, private readonly twoFA: TwoFAService, private readonly notifyService: Notify, private readonly router: Router, ) { makeAutoObservable(this, {}, { autoBind: true }); } public openDocCreation = () => { const permission = this.permissions.administration.administrationActions; if (permission.isAllowed) { this.router.push(APP_ROUTES.createDoc.getRedirectPath()); return; } if (permission.hasReason(PermissionDenialReason.NoAdmin)) { this.notifyService.error( 'Доступно только администратору' ); return; } if (permission.hasReason(PermissionDenialReason.TwoFA)) { // Здесь можно, например, реализовать открытие модалки для 2FA this.notifyService.error( 'Нужно пройти 2FA', ); return; } this.notifyService.error( 'Добавить документ на полку нельзя. Попробуйте сменить аккаунт', ); }; } ","version":"Next","tagName":"h2"},{"title":"Единый Permissions Module","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsModule","content":"","keywords":"","version":"Next"},{"title":"Состав permissions модуля​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#состав-permissions-модуля","content":" Логика формирования доступовТипы доступных в приложении доступовПричины отказа в доступахЛогика блокировки рутов приложения ","version":"Next","tagName":"h2"},{"title":"Причины концентрации логики доступов в одном модуле​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#причины-концентрации-логики-доступов-в-одном-модуле","content":" Контроль доступов приложения в одной точкеРасчет доступов, в большинстве случаев, связан с данными, которые необходимо получать из других модулей. Если формировать доступы на уровне конкретного модуля, то возникнет нежелательное зацепление между модулямиДоступы, мнимо относящиеся к разным модулям, будут использованы в других модулях, что также породит нежелательное зацеплениеПравила, позволяющие вычислять доступы, должны быть переиспользованы. Хранение правил в одном модуле позволит избежать зацепления модулейПричины отказа в доступе и логика для расчета доступов должна использоваться между доступами. Не централизованное хранение причин отказа и логики приведен к высокому зацеплению в системеВозможность централизованной подготовки данных для формирования базовых доступов ","version":"Next","tagName":"h2"},{"title":"Пример с нежелательным зацеплением​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#пример-с-нежелательным-зацеплением","content":" Требования Кнопка "Добавить документ" доступна только если есть подключенная организацияКнопка "Удалить организацию" доступна только если в рамках данной организации не было создано документов Решение с зацеплением Модуль docs реализует доступ docActions, который импортирует логику из модуля organization для проверки данных об организации. Модуль organization реализует доступ deletingOrganization, который импортирует логику из модуля docs для проверки данных о документах. Получаем циклическую зависимость и зацепление между модулями. Решение без зацепления Модуль permissions содержит доступы docActions и deletingOrganization, импортируя логику из модулей docs и organization. Модуль docs и organization теперь не зацеплены между собой. ","version":"Next","tagName":"h3"},{"title":"Reasons. Причины отказа в доступе","type":0,"sectionRef":"#","url":"/guides/docs/permissions/reasons","content":"","keywords":"","version":"Next"},{"title":"Пример использования​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#пример-использования","content":" Требования Пользователь не может добавить книгу на свою полку, если: Аккаунт не оплаченПревышено доступное количество книг, которое можно добавить на полку Если у пользователя не оплачен аккаунт, то при нажатии на кнопку "Добавить на полку" должна открыться модалка с предложением об оплате. Если пользователь достиг предел добавленных книг на полку, то необходимо отобразить уведомление "Достигнуто максимальное количество книг на полке". Решение modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicy // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } modules/books/features/BookCard/UIStore // В реальном коде для импорта из другого модуля необходимо использовать external файл import { PermissionDenialReason, PermissionsStore, permissionsStore, } from '@example/modules/permissions'; export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this, {}, { autoBind: true }); } public addToShelf = () => { if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${this.bookId} добавлена на полку`); return; } if (this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.NoPay)) { this.openPaymentAccount(); return; } if ( this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.ExceedReadingCount) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } export const createUIStore = (bookId: string) => new UIStore(bookId, permissionsStore, notify); modules/books/features/BookCard/BookCard.tsx type Props = { id: string; }; export const BookCard = observer(({ id }: Props) => { const [{ addToShelf, isOpenPayAccount, closePayAccount }] = useState(() => createUIStore(id)); return ( <> <Container> <BookInfo /> <Button onClick={addToShelf}>Добавить на полку</Button> </Container> <PayAccountModal isOpen={isOpenPayAccount} onClose={closePayAccount} /> </> ); }); ","version":"Next","tagName":"h2"},{"title":"Все reasons хранятся в одном enum​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#все-reasons-хранятся-в-одном-enum","content":" Одни и те же причины отказа переиспользуются между разными permissions и policies. Все reasons необходимо хранить в одном enum для того, чтобы не создавать дополнительные сложности декомпозиции при росте причин. Reasons должны располагаться в modules/permissions/domain/enums.ts: export enum PermissionDenialReason { /** * Не является администратором * **/ NoAdmin = 'no-admin', /** * Аккаунт не оплачен * **/ NoPayAccount = 'no-pay-account', } Пакет @astral/permissions содержит дополнительные системные причины отказа, которые могут произойти из-за ошибок в коде: export enum SystemDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = 'internal-error', /** * Недостаточно данных для формирования доступа * **/ MissingData = 'missing-data', } Для централизованного хранения reasons, необходимо объединить SystemDenialReason и reasons нашего модуля: import { SystemDenialReason } from '@astral/permissions'; export enum PermissionsDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = SystemDenialReason.InternalError, /** * Недостаточно данных для формирования доступа * **/ MissingData = SystemDenialReason.MissingData, /** * Пользователь не является админом * **/ NoAdmin = 'no-admin', } ","version":"Next","tagName":"h2"},{"title":"Соглашения​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#соглашения","content":" Для каждого reason должен быть оставлен комментарий в виде jsdoc о предназначении данного reasonЗначения reasons должны быть String в формате kebab-case ","version":"Next","tagName":"h2"},{"title":"Policies. Политики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/policies","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#местоположение","content":" Все политики находятся в директории policies: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | | |── AdministrationPolicyStore/ | | | | | |── BooksPolicyStore/ | | | | | |── PaymentPolicyStore/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts Policies являются частью имплементации PermissionStore, поэтому находятся внутри него. ","version":"Next","tagName":"h2"},{"title":"Создание политик​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#создание-политик","content":" ","version":"Next","tagName":"h2"},{"title":"Политики напрямую связаны с модулями системы​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#политики-напрямую-связаны-с-модулями-системы","content":" Modules - это предметные подобласти предметной области проекта. Permissions внутри policies работают в рамках предметных подобласть проекта, поэтому policies должны соответствовать названию modules. Примеры Permission administrationActions концептуально относится к модулю administration, поэтому создается AdministrationPolicyPermission readingBook концептуально относится к модулю books, поэтому создается BooksPolicy ","version":"Next","tagName":"h3"},{"title":"Пример создания с использованием @astral/permissions​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#пример-создания-с-использованием-astralpermissions","content":" modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager.createPolicy создает политику, которая позволит в дальнейшем создавать permissions this.policy = this.policyManager.createPolicy({ name: 'administration', // Метод для подготовки данных необходимых для формирования доступов AdministrationPolicy prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } } ","version":"Next","tagName":"h3"},{"title":"Доступ к политикам через единую точку PermissionsStore​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#доступ-к-политикам-через-единую-точку-permissionsstore","content":" PermissionsStore - это singleton и единая входная точка в приложении для получения информации о доступах. Другие модули приложения взаимодействуют именно с PermissionStore. Пример реализации: import { makeAutoObservable } from 'mobx'; import { billingRepository, userRepository } from '@example/data'; import type { BillingRepository, UserRepository } from '@example/data'; // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; import { createAdministrationPolicyStore, createBooksPolicyStore, createPaymentPolicyStore, } from './policies'; import type { AdministrationPolicyStore, BooksPolicyStore, PaymentPolicyStore, } from './policies'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } // singleton export const permissionsStore = new PermissionsStore( billingRepository, userRepository, ); Пример использования: export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } Мотивация Возможность централизованной подготовки данных для формирования permissionsВозможность реализации логирования для дебагингаУвеличение DX за счет отказа от необходимо импорта разных policies ","version":"Next","tagName":"h2"},{"title":"Переиспользование логики между policies​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#переиспользование-логики-между-policies","content":" Policies не должны зависеть друг от друга и соответственно переиспользовать permissions потому. Переиспользование permissions между policies приводит к пересечению бизнес требований и запутанной логике формирования доступов. Если между policies необходимо переиспользовать логику, то надо использовать rules. ","version":"Next","tagName":"h2"},{"title":"Формирование доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsFormation","content":"","keywords":"","version":"Next"},{"title":"Как выделять permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#как-выделять-permission","content":" Требование является permission, если: Требование указывает на то, что функционал приложения должен быть ограничен на основе данных об аккаунте (роль, организация, оплата...)Описанное ограничение может быть снято при изменении данных пользователя Permission не является: Временный Feature Toggle на функционалПерманентное условие на блокировку функционала, без возможности открытия доступа (даже при изменении роли пользователя)Условия (if) в коде, реализующие рядовые бизнес требования ","version":"Next","tagName":"h2"},{"title":"Примеры требований​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#примеры-требований","content":" Кнопка "Создать документ" доступна только администратору - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если изменить роль пользователя. Кнопка "Редактировать документ" доступна только для пользователей с платным аккаунтом и добавленной организацией - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если оплатить аккаунт и добавить организацию. Кнопка "Создать документ" заблокирована до 20.05.2024 - это не permission, а feature toggle. Требование не зависит от данных пользователя. При этом: Кнопка "Создать документ" для пользователей с тарифом "Базовый" заблокирована до 20.05.2024 - это уже permission потому, что основывается на данных пользователя. Кнопка "Отправить" заблокирована, если чекбокс "Ознакомлен с требованиями" не активен - это не permission. Это требование для формы. ","version":"Next","tagName":"h3"},{"title":"Создание permissions посредством @astral/permissions​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#создание-permissions-посредством-astralpermissions","content":" Permissions создаются только внутри policy с помощью метода policy.createPermission: modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { // разрешает доступ return allow(); } // запрещает доступ с конкретной причиной deny(PermissionDenialReason.NoAdmin); }); } } ","version":"Next","tagName":"h2"},{"title":"API Permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#api-permission","content":" createPermission возвращает объект вида: type Permission = { isAllowed: boolean; /** * Причина отказа в доступе */ reason?: string; /** * @example permission.hasReason(DenialReason.NoAdmin) */ hasReason: (reason: string) => boolean; }; О причинах отказа читайте далее. ","version":"Next","tagName":"h3"},{"title":"Пример реализации и использования permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример-реализации-и-использования-permission","content":" Требования Кнопка "Создать книгу" в Sidebar отображается только если пользователь является администратором. Решение modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore class AdministrationPolicyStore { constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } В features необходимо избегать разрешения доступов через абстрактные компоненты вида: import { observer } from 'mobx-react-lite'; import { permissionsStore } from '@example/modules/permissions'; export const Sidebar = observer(() => { return ( <Sidebar> <PermissionsGateway permission={permissionsStore.administration.administrationActions} allow={ <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> } /> </Sidebar> ); }); Использование компонентов вроде PermissionsGateway переносит логику доступов для фичи в UI слой, что нарушает архитектурную концепцию. Разрешение доступов должно происходить в UIStore: modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } modules/layout/features/MainLayout/Sidebar/Sidebar.tsx export const Sidebar = observer(() => { const [{ isAllowedBookCreation }] = useState(createUIStore); return ( <Sidebar> <SidebarItem> {isAllowedBookCreation && ( <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> )} </SidebarItem> </Sidebar> ); }); ","version":"Next","tagName":"h2"},{"title":"Permission не должен зависеть от UI​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#permission-не-должен-зависеть-от-ui","content":" Permission не должен напрямую зависеть и указывать на UI, который блокируется. Зависимость от UI приведет к взрывному росту permissions и в последствии к сложной поддержке кода. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример","content":" Кнопка "Создать документ" отображается только если пользователь является администратором - в данном требовании присутствует указать на конкретную кнопку. Неправильное решение​ Создать permission showCreationDocButton: class AdministrationPolicyStore { ... public get showCreationDocButton() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get allowAdministrationRoute() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get showEditingDocModal() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Как видно из примера, при связывании permission и UI происходит взрывной рост одинаковых доступов: Доступ к кнопкеДоступ к рутуДоступ к модалке редактирования Правильное решение​ Создать абстрактный permission administrationActions, который будет закрывать доступ к действиям администратора: class AdministrationPolicyStore { ... public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Теперь на уровне features необходимо проверять administrationActions и на основе его выполнять необходимые действия. ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг","content":" Название permission должно отвечать на вопрос: "Доступ открыт/закрыт для чего/к чему?". Примеры Доступ закрыт к действиям администратора - administrationActionsДоступ закрыт к чтению книги онлайн - readingBookДоступ закрыт к управлению организацией - organizationManagement ✅ Valid public get administrationActions() { ... } public get addingToShelf() { ... } public get readingBook() { ... } public get organizationManagement() { ... } ❌ Invalid public get canReadingBook() { ... } public get isAddToShelf() { ... } ","version":"Next","tagName":"h2"},{"title":"Нейминг методов для вычисления доступов​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг-методов-для-вычисления-доступов","content":" Для методов, которые вычисляют доступы, добавляется префикс calc. ✅ Valid public calcReadingBook = (bookId: string) => { ... } ❌ Invalid public checkReadingBook = (bookId: string) => { ... } ","version":"Next","tagName":"h3"},{"title":"Rules. Переиспользование логики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/rules","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#местоположение","content":" Все правила находятся в директории rules: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | ├── rules/ | | | | | |── calcAcceptableAge/ | | | | | |── calcAccountPayment/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Rules - приватные функции модуля permissions​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#rules---приватные-функции-модуля-permissions","content":" Rules недоступны вне permissions модуля и являются частью имплементации PermissionsStore. ","version":"Next","tagName":"h2"},{"title":"Реализация rules​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#реализация-rules","content":" Rules создаются с помощью createRule из пакета @astral/permissions: ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#пример","content":" Требования Чтение книги доступно только если возраст пользователя соответствует доступному возрасту, указанному в книгеПокупка товара доступна только если возраст пользователя соответствует доступному возрасту, указанному в товаре Решение Требуется реализовать два permissions: calcReadingBook и calcPayment. Оба permissions должны реализовать одну и ту же логику проверки возраста пользователя. Необходимо реализовать rule: calcAcceptableAge: modules/permissions/domain/stores/PermissionsStore/rules/calcAcceptableAge // @astral/permissions в реальном коде необходимо реэкспортировать через shared import { createRule } from '@astral/permissions'; export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if (getDateYearDiff(new Date(userBirthday), new Date()) < acceptableAge) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); Далее PaymentPolicyStore и BooksPolicyStore используют calcAcceptableAge для вычисления доступов: modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicyStore import { calcAcceptableAge } from '../../rules'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность прочитать книгу онлайн */ public calcReadingOnline = (acceptableAge?: number) => { return this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } const billingInfo = this.billingRepo.getBillingInfoQuery().data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } allow(); }); }; } ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#нейминг","content":" Все rules имеют префикс calc. ✅ Valid /** * Вычислить админские доступы */ const calcAdminPermissions = (role: string) => {...}; /** * Вычислить доступность возраста */ const calcAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ❌ Invalid const checkAdminRole = (role: string) => {...}; const checkAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ","version":"Next","tagName":"h2"},{"title":"Подготовка данных для доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/preparingData","content":"","keywords":"","version":"Next"},{"title":"Каждая policy указывает какие данные нужны для доступов​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#каждая-policy-указывает-какие-данные-нужны-для-доступов","content":" Каждая policy определяет метод подготовки данных, которые нужны для формирования запросов. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#пример","content":" В BooksPolicy для формирования доступа addingToShelf требуются данные из UserRepository и BillingRepository. При создании policy необходимо указать как получить эти данные: // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', // prepareData будет вызван одновременно с другими policy посредством policyManager prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } ","version":"Next","tagName":"h3"},{"title":"PermissionsStore.prepareData подготовит данные для всех policy​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#permissionsstorepreparedata-подготовит-данные-для-всех-policy","content":" PermissionsStore должен иметь метод prepareData, который вызовет подготовку данных в каждом policy: // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } За подготовку данных отвечает PolicyManagerStore. PolicyManagerStore регистрирует для каждого policy метод подготовки prepareDataи при вызове policyManager.prepareData запускает вызов каждой prepareData каждого policy Мотивация использования единого метода подготовки данных Выбран подход использования единого метода для загрузки данных для того, чтобы соблюдать баланс между сложностью использования и оптимизацией загрузки данных: Если вызывать для каждой policy или для каждого permission отдельный метод загрузки данных, то все фичи приложения, использующие доступы, должны будут быть обернуты в ContentStateНеобходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения ","version":"Next","tagName":"h2"},{"title":"Использование​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#использование","content":" PermissionsStore.prepareData необходимо вызывать в application слое приложения: application/app.tsx export const App = observer(() => { const renderRoutes = useRoutes(routes); const permissionsStatus = permissionsStore.preparingDataStatus; useEffect(() => { permissionsStore.prepareData(); authStore.addProtectedHttpClients([apiHttpClient]); }, []); return ( <ThemeProvider theme={theme}> <NotificationContainer /> <ContentState isError={permissionsStatus.isError} isLoading={permissionsStatus.isLoading} errorState={{ errorList: [permissionsStatus.error], onRetry: permissionsStore.prepareData, }} > <MainLayout>{renderRoutes}</MainLayout> </ContentState> </ThemeProvider> ); }); Не рекомендуется рендерить приложение, пока данные для permissions не будут успешно подготовлены. ","version":"Next","tagName":"h3"},{"title":"Оптимизация PermissionsStore.prepareData​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#оптимизация-permissionsstorepreparedata","content":" Необходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения. Запросы могут использоваться в prepareData, если: Запрашиваемые данные нужны для рендеринга приложения не только в PermissionsStoreЗапрашиваемые данные значительно не влияют на блокировку рендера приложения Если запросы являются не оптимальными для использования в PermissionsStore, то для формирования permissions необходимо использовать методы, принимающие на вход данные: import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } В таком случае за получение данных будет ответственна та часть приложения, которая будет использовать permission: modules/books/features/BookCard/UIStore export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, private readonly booksRepo: BooksRepository ) { makeAutoObservable(this, {}, { autoBind: true }); } private get bookByIdQuery() { return this.booksRepo.getBookByIdQuery(this.bookId); } public buy = () => { const payPermission = this.permissions.calcPayment(this.bookByIdQuery.acceptableAge); if (payPermission.isAllowed) { this.notifyService.success(`Книга ${bookId} оплачена`); return; } if (payPermission.hasReason(PermissionDenialReason.NotAcceptAge)) { this.notifyService.error('Вы слишком молоды'); return; } this.notifyService.error( 'Купить книгу нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } ","version":"Next","tagName":"h2"},{"title":"Обработка проблем получения данных​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#обработка-проблем-получения-данных","content":" Если перед использованием permissions в features, не были успешно загружены данные, то permissions будут возвращать объект с конкретным reason: type DenialMissingDataPermission = { isAllowed: false; reason: PermissionDenialReason.MissingData; }; Reason PermissionDenialReason.MissingData можно будет при необходимости обработать централизованно или на месте использования permissions. ","version":"Next","tagName":"h2"},{"title":"Route Guards. Доступы к рутам приложения","type":0,"sectionRef":"#","url":"/guides/docs/permissions/routes","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#местоположение","content":" Все Route Guards хранятся в modules/permissions/features/routeGuards: ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Guard вызывается для каждой page​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#guard-вызывается-для-каждой-page","content":" Route Guard должен вызываться на каждой page, которая должна быть защищена доступами. МотивацияВызов Route Guard для каждого page позволяет достичь простоты поддержки. При исследовании pages сразу видна связь страницы и доступов. Использование конфигурации с описанием доступных рутов в модуле permissions значительно усложняет понимание кода и простоту поддержки функционала. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример","content":" Необходимо закрыть pages: admin/createBookbook/reading ├── application/ | ├── pages/ | | ├── admin/ | | | ├── createBook.tsx | | ├── book/ | | | ├── reading.tsx ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; application/pages/book/reading.tsx import { NotFoundScreen, ReadingBookScreen } from '@example/screens'; import { useRouterParams } from '@example/shared'; import { ReadingBookRouteGuard } from '@example/modules/permissions'; const ReadingBookPage = () => { const { id } = useRouterParams(); if (!id) { return <NotFoundScreen title="Книга не найдена" />; } return ( <ReadingBookRouteGuard id={id}> <ReadingBookScreen id={id} /> </ReadingBookRouteGuard> ); }; export default ReadingBookPage; ","version":"Next","tagName":"h3"},{"title":"Вложенные страницы​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#вложенные-страницы","content":" Использование Route Guard для каждой страницы создает небольшой overhead: для каждой вложенной страницы необходимо вызывать Route Guard, возможности закрыть всю вложенность нет. Данное ограничение принимается в угоду более простой поддержки. ","version":"Next","tagName":"h3"},{"title":"Создание Route Guard​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#создание-route-guard","content":" В modules/permissions/features/routeGuards необходимо создать Route Guard, который будет закрывать конкретную страницу или ряд страниц. Реализация зависит от требований. Все Route Guard создаются на основе абстрактного PermissionRouteGuard. PermissionRouteGuard - фасад, позволяющий упростить реализацию Route Guards и обработать стандартные причины отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-1","content":" Требования Страница создания книги (admin/createBook) должна быть доступна только администратору. Реализация В AdministrationPolicy уже реализован permissions - administrationActions, на основе которого можно делать вывод доступна ли пользователю страница создания книги. На момент реализации, все вложенные руты в /admin подходят под administrationActions permission, поэтому реализуем единый для всех /admin/ Guard: modules/permissions/features/routeGuards/AdminRouteGuard import type { ReactNode } from 'react'; import { observer } from 'mobx-react-lite'; import { PageLayout, Placeholder } from '@example/shared'; import { PermissionDenialReason, permissionsStore } from '../../../domain'; import { PermissionGuard } from '../../PermissionGuard'; type Props = { children: ReactNode; }; export const AdminRouteGuard = observer(({ children }: Props) => { return ( <PermissionGuard permission={permissionsStore.administration.administrationActions} denialSwitch={{ [PermissionDenialReason.NoAdmin]: ( <PageLayout header={{ title: 'Панель администратора' }} content={{ children: ( <Placeholder title="Доступно только для администраторов" /> ), }} /> ), }} > {children} </PermissionGuard> ); }); denialSwitch позволяет обработать причины отказа. В данном случае, если причина отказа 'no-admin', то необходимо показать соответствующий Placeholder. Закрывает требуемую страницу приложения: application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; ","version":"Next","tagName":"h3"},{"title":"Обработка дефолтных причин отказа в доступе​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#обработка-дефолтных-причин-отказа-в-доступе","content":" В PermissionRouteGuard можно обработать дефолтные причины для отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-2","content":" import { Placeholder } from '@example/shared'; import type { Permission } from '../../domain'; import { PermissionDenialReason } from '../../domain'; type Props = { permission: Permission; /** * Позволяет отрендерить компонент для конкретной причины отказа в доступе */ denialSwitch: Record<string, ReactNode>; children: ReactNode; }; /** * Закрывает доступ к children, обрабатывает дефолтные причины отказа */ export const PermissionGuard = ({ permission, denialSwitch, children, }: Props) => { if (permission.isAllowed) { return children; } if (denialSwitch[permission.reason]) { return denialSwitch[permission.reason]; } if (permission.reason === PermissionDenialReason.NoPayAccount) { return <Placeholder title="Необходимо оплатить аккаунт" />; } if (permission.reason === PermissionDenialReason.MissingUserAge) { return <Placeholder title="Необходимо заполнить дату рождения в ЛК" />; } return <Placeholder title="Нет доступа" />; }; ","version":"Next","tagName":"h3"},{"title":"Принципы тестирования доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/testing","content":"","keywords":"","version":"Next"},{"title":"Алгоритм покрытия Policy тестами​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#алгоритм-покрытия-policy-тестами","content":" Пример policy: export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } На каждый permission, определенный в policy, необходимо писать тесты. Для каждого permission необходимо создавать отдельный describe​ describe('AdministrationPolicyStore', () => { describe('Добавление книги на полку', () => {}); }); Для каждого permission необходимо обработать положительные и отрицательные кейсы​ Формирование кейсов происходит в соответствии с вызовом allow и deny в коде: public get addingToShelf() { return this.policy.createPermission((allow, deny) => { // Тест-кейс: Доступно администратору if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; // Тест-кейс: Недоступно, если аккаунт не оплачен if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } // Тест-кейс: Недоступно, если превышено количество добавлений if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Тест-кейс: Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке allow(); }); } Реализуемые тест-кейсы: describe('BooksPolicyStore', () => { describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); it('Недоступно, если аккаунт не оплачен', async () => {}); it('Недоступно, если превышено количество добавлений', async () => {}); it('Недоступно, если достигнуто максимальное количество добавлений', async () => {}); it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => {}); }); }); Перед началом выполнения теста необходимо всегда вызывать prepareData​ PolicyManagerStore поддерживает асинхронный вызов prepareData - prepareDataAsync. describe('BooksPolicyStore', () => { const setup = async ({ isAdmin, billingInfo, }: { isAdmin: boolean; billingInfo?: Partial<BillingRepositoryDTO.BillingInfo>; }) => { const policyManager = createPolicyManagerStore(); const cacheService = createCacheService(); const userRepoMock = mock<UserRepository>({ getRolesQuery: () => cacheService.createQuery(['roles'], async () => ({ isAdmin, })), }); const billingRepoMock = mock<BillingRepository>({ getBillingInfoQuery: () => cacheService.createQuery(['billing'], async () => billingRepositoryFaker.makeBillingInfo(billingInfo), ), }); const sut = new BooksPolicyStore( policyManager, billingRepoMock, userRepoMock, ); await policyManager.prepareDataAsync(); return { sut }; }; describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); }); }); Если не вызвать prepareData, то все доступы будут недоступны. При тестировании отказа в доступе, необходимо проверять reason​ Тест-кейс Недоступно, если аккаунт не оплачен должен считаться пройденным только если reason соответствует PermissionDenialReason.NoPayAccount: it('Недоступно, если аккаунт не оплачен', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: false }, }); expect(sut.addingToShelf.isAllowed).toBeFalsy(); expect(sut.addingToShelf.reason).toBe( PermissionDenialReason.NoPayAccount, ); }); Финальный вызов allow или deny должен обрабатываться одним тест-кейсом​ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Этот allow будет иметь один тест-кейс allow(); }); } Финальный вызов allow или deny должен аккумулировать условия, которые не описаны в коде: it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: true, info: billingRepositoryFaker.makeBillingDetails({ shelf: { currentCount: 1, allowedCount: 2 }, }), }, }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); Мотивация Позволяет избежать роста количества тест-кейсов. ","version":"Next","tagName":"h2"},{"title":"Тестирование Rules​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-rules","content":" При тестировании rules необходимо: Покрыть тестами положительные и отрицательные сценарии. Допустима группировкаПри тестировании отказа в доступе проверять reasonПоследний вызов allow или deny покрывать один тест-кейсом export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if ( Math.abs(getDateYearDiff(new Date(userBirthday), new Date())) < acceptableAge ) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); describe('calcAcceptableAge', () => { describe('Доступа нет', () => { it('Если нет данных о доступном возрасте', () => { const permission = calcAcceptableAge(); expect(permission.isAllowed).toBeFalsy(); expect(permission.reason).toBe(PermissionDenialReason.MissingData); }); it('Если у пользователя не заполнена дата рождения', () => {}); it('Если возраст пользователя не соответствует допустимому', () => {}); }); it('Доступ открыт, если есть доступный возраст + день рождения пользователя и возраст соответствует допустимому', () => {}); }); ","version":"Next","tagName":"h2"},{"title":"Тестирование UIStore, использующего permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-uistore-использующего-permissions","content":" Пример: Реализованный UIStore использует permissions.books.addingToShelf. Логика формирования addingToShelf уже протестирована в permissions module, поэтому в UIStore необходимо протестировать только реакцию на разрешение и отказ в доступе: export class UIStore { public isOpenAccountPayment = false; constructor( private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this); } public addToShelf = (bookId: string) => { // Тест-кейс: Показывает информационное уведомление, если книга была успешно добавлена if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${bookId} добавлена на полку`); return; } // Тест-кейс: Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.NoPayAccount, ) ) { this.openPaymentAccount(); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.ExceedReadingCount, ) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPaymentAccount = () => { this.isOpenAccountPayment = true; }; public closePaymentAccount = () => { this.isOpenAccountPayment = false; }; } Реализуемые тест-кейсы: describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { it('Показывает информационное уведомление, если книга была успешно добавлена', () => {}); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => {}); it('Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений', () => {}); it('Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа', () => {}); }); }); ","version":"Next","tagName":"h2"},{"title":"Мок permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#мок-permissions","content":" Для подмены permissions необходимо использовать mockDeep из библиотеки vitest-mock-extended и createDenialPermission из @astral/permissions: import { mockDeep } from 'vitest-mock-extended'; import { createAllowedPermission, createDenialPermission } from '@astral/permissions'; describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { const setup = (permissionsStoreMock: PermissionsStore) => { const notifyMock = mock<Notify>(); const sut = new UIStore(permissionsStoreMock, notifyMock); sut.addToShelf('id'); return { notifyMock, sut }; }; it('Показывает информационное уведомление, если книга была успешно добавлена', () => { // permissionsStoreMock делает addingToShelf доступным const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createAllowedPermission(), }, }); const { notifyMock } = setup(permissionsStoreMock); expect(notifyMock.info).toBeCalledWith('Книга id добавлена на полку'); }); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => { // permissionsStoreMock делает addingToShelf недоступным с причиной NoPayAccount const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createDenialPermission( PermissionDenialReason.NoPayAccount, ), }, }); const { sut } = setup(permissionsStoreMock); expect(sut.isOpenAccountPayment).toBeTruthy(); }); }); }); ","version":"Next","tagName":"h3"}],"options":{"languages":["en","ru"],"id":"default"}} \ No newline at end of file +{"searchDocs":[{"title":"Работа с env в архитектуре","type":0,"sectionRef":"#","url":"/guides/docs/env/arch","content":"","keywords":"","version":"Next"},{"title":"ConfigService​","type":1,"pageTitle":"Работа с env в архитектуре","url":"/guides/docs/env/arch#configservice","content":" Слои приложения, отличные от application, должны получать данные из env через ConfigService. Подробнее о ConfigService читайте в документации. ","version":"Next","tagName":"h2"},{"title":"Nextjs. SSR и SSG","type":0,"sectionRef":"#","url":"/guides/docs/env/ssr","content":"Nextjs. SSR и SSG Если на проекте используется Nextjs, то необходимо использовать тот механизм работы с env, который предоставляет фреймворк. При SSR и SSG env нужны при билде.","keywords":"","version":"Next"},{"title":"Безопасность. Использование PUBLIC и PRIVATE env","type":0,"sectionRef":"#","url":"/guides/docs/env/safety","content":"","keywords":"","version":"Next"},{"title":"Мотивация​","type":1,"pageTitle":"Безопасность. Использование PUBLIC и PRIVATE env","url":"/guides/docs/env/safety#мо�тивация","content":" Если все env переменные сделать доступные в браузере, то злоумышленники могут найти уязвимости системы потому, что env хранит информацию о сервере, на котором запускает билд или само приложение. Именно по этой причине Nextjs и Vite требуют для env переменных префиксы: NEXT_PUBLIC | NEXT_PRIVATE, VITE_. ","version":"Next","tagName":"h2"},{"title":"CSR​","type":1,"pageTitle":"Безопасность. Использование PUBLIC и PRIVATE env","url":"/guides/docs/env/safety#csr","content":" Если приложение собирается через webpack, то достаточно просто следовать указанным ранее соглашениям по именованию. Если приложение собирается через vite, то необходимо использовать envPrefix для кастомизации префикса. ","version":"Next","tagName":"h2"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/env/intro","content":"Intro Раздел содержит: Как работать с env в рамках единой архитектурыКак генерировать и загружать env в CSR (Client Side Rendering)","keywords":"","version":"Next"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/intro","content":"Intro Архитектура и стандартные фичи, описанные в документации, должны быть использованы при проектировании frontend в Астрал-Софт.","keywords":"","version":"Next"},{"title":"Issues","type":0,"sectionRef":"#","url":"/guides/docs/issues","content":"Issues Предложения по изменению документации или добавлению новых правил принимают либо на доске Frontend.Shared, либо через PR на Github.","keywords":"","version":"Next"},{"title":"CSR + Nginx. Динамические env","type":0,"sectionRef":"#","url":"/guides/docs/env/csr","content":"","keywords":"","version":"Next"},{"title":"Пример​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#пример","content":" Пример реализован в vite-boilerplate. ","version":"Next","tagName":"h2"},{"title":"Проблема получения env в build time​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#проблема-получения-env-в-build-time","content":" Получение env в build time - это классический подход. Работает следующим образом: Сборщик при запуске получаетЛибо помещает полученные env в import.meta.env (vite), либо делает replace process.env переменных на их значения непосредственно в js коде (webpack)Переменные доступны в браузере при выполнении js Проблемы: Для изменения значений env необходимо заново пересобирать приложениеЕсли в приложении есть поддержка white label, то для каждого бренда необходимо собирать отдельный docker image. Это сильно увеличивает время сборки приложения и количество ресурсов, необходимое для поддержки и развертывания Для решения описанных проблем необходимо делать inject env в html при запуске docker контейнера. ","version":"Next","tagName":"h2"},{"title":"Генерация index.html и inject env​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml-и-inject-env","content":" Для того чтобы при изменении env переменных не приходилось заново делать сборку, необходимо при запуске docker контейнера генерировать index.html и инжектировать в html env переменные. ","version":"Next","tagName":"h2"},{"title":"Генерация index.html из index.template.html​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml-из-indextemplatehtml","content":" В репозитории должен находиться только index.template.html - это шаблон html, на основе которого будет построен index.html. index.html должен быть добавлен в .gitignore. Содержимое index.template.html​ Пример index.template.html index.template.html содержит всю необходимую для приложения разметку и <script> в <head>: <script> <!-- При запуске dev команды или запуске docker контейнера в __ENV__ подставятся значения из окружения --> window.__ENV__={}; </script> Зачем нужен index.template.html и почему index.html в .gitignore?​ При запуске dev-server должно происходить inject env переменных в index.html, если файл не будет в .gitignore, то в репозиторий могут случайно попасть изменения, которых разработчик не делал. Для генерации и inject env используются bash скрипты.​ Bash используется по причине того, что для CSR в компании используется Nginx. Это означает, что в итоговом docker контейнере нет nodejs, а если добавить в образ nodejs, то он вырастет в разы по объему, что повлияет на скорость сборок и оптимизацию хранилища. ","version":"Next","tagName":"h3"},{"title":"Dev Mode​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#dev-mode","content":" ","version":"Next","tagName":"h2"},{"title":"Генерация index.html. generateEnv.dev.sh скрипт​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml-generateenvdevsh-скрипт","content":" Пример generateEnv.dev.sh В режиме разработки необходимо, чтобы перед каждым запуском dev-server выполнялся bash скрипт, который: Парсит все переменные из файла .env.local (или .env.dev) с префиксами PUBLIC_Создает в директории для раздачи статики index.html с копией содержимого из index.template.html. Для vite директория для раздачи статики - это корень приложения. Для webpack - public директорияЗаменяет в index.html window.__ENV__={} на: window.__ENV__={"PUBLIC_API_URL":"https://astral.ru"}; ","version":"Next","tagName":"h3"},{"title":"Prod Mode​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#prod-mode","content":" ","version":"Next","tagName":"h2"},{"title":"Генерация index.html​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#генерация-indexhtml","content":" Dockerfile​ При запуске docker контейнера необходимо запускать bash скрипт, который сгенерирует index.html файл и инжектирует в него env. Для этого в Dockerfile необходимо добавить команду выполнения скрипта при запуске контейнера: FROM node:22-alpine AS build WORKDIR /usr/src/app COPY package.json package-lock.json* ./ COPY . . RUN npm i --production RUN npm run build FROM fholzer/nginx-brotli:v1.19.1 COPY .nginx/nginx.conf.template /etc/nginx/nginx.conf.template COPY --from=build /usr/src/app/dist /usr/share/nginx/html # Запускаем контейнер при помощи exec в shell оболочке, чтобы иметь доступ к env ENTRYPOINT ["sh", "/usr/share/nginx/html/scripts/startup.prod.sh"] Скрипт startup.prod.sh​ Пример startup.prod.sh Скрипт startup.prod.sh выполняет следующие действия: Достает из текущего окружения все env переменные с префиксом PUBLIC_Создает index.html с копией содержимого из index.template.htmlЗаменяет в index.html window.__ENV__={} на: window.__ENV__={"PUBLIC_API_URL":"https://astral.ru"}; Подменяет переменные для nginx на их значения. Читай об этом подробнее здесьЗапускает nginx ","version":"Next","tagName":"h3"},{"title":"Подстановка переменных в nginx​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#подстановка-переменных-в-nginx","content":" В зависимости от env в проекте может изменяться nginx.conf. Для того чтобы nginx.conf менялся при запуске необходимо: Создать в проекте файл nginx.conf.template. Из него будет генерироваться уже настоящий nginx.conf.Заменить динамические участки конфига на ${PUBLIC_WS_URL}. Пример: http { ... server { listen 80; listen [::]:80; ... add_header Content-Security-Policy connect-src 'self' ${PUBLIC_WS_URL}; ... } } Добавить в startup.prod.sh следующий код с переменными, которые необходимо подменить: # Необходимо экспортировать, тк envsubst является разветвленным процессом и не знает неэкспортируемых переменных export PUBLIC_WS_URL # Подмена указанных переменных в nginx.conf.template и копирование всего файла в nginx.conf envsubst "${PUBLIC_WS_URL}" < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf При запуске startup.prod.sh подменит в nginx.conf.template все переменные на их значения и создаст nginx.conf, который и будет использовать для запуска nginx ","version":"Next","tagName":"h3"},{"title":"Использование env из сгенерированного файла​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#использование-env-из-сгенерированного-файла","content":" Для использования переменных необходимо определить тип для window.__ENV__ в global.d.ts: interface Window { __ENV__: { PUBLIC_API_URL: string; PUBLIC_SENTRY_DSN: string; PUBLIC_SENTRY_ENV: string; PUBLIC_RELEASE_TAG: string; }; } В браузере доступ к env переменным осуществляется через window.__ENV__ в application слое приложения: configService.init({ apiUrl: window.__ENV__.PUBLIC_API_URL, monitoringDsn: window.__ENV__.PUBLIC_SENTRY_DSN, monitoringStand: window.__ENV__.PUBLIC_SENTRY_ENV, monitoringRelease: window.__ENV__.PUBLIC_RELEASE_TAG, }); ","version":"Next","tagName":"h2"},{"title":"Преимущества inject env в index.html​","type":1,"pageTitle":"CSR + Nginx. Динамические env","url":"/guides/docs/env/csr#преимущества-inject-env-в-indexhtml","content":" Inject env позволяет: Получать env в браузере синхронно. Нет необходимости делать обработку асинхронного получения данных. Код приложения гарантированно получает все env на этапе выполненияСнизить к 0 затраты на загрузку динамических env ","version":"Next","tagName":"h2"},{"title":"Пример реализации паттерна","type":0,"sectionRef":"#","url":"/guides/docs/permissions/example","content":"","keywords":"","version":"Next"},{"title":"Permissions Module​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#permissions-module","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions ","version":"Next","tagName":"h2"},{"title":"Policies​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#policies","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/policies ","version":"Next","tagName":"h2"},{"title":"Reasons​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#reasons","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/enums.ts ","version":"Next","tagName":"h2"},{"title":"Rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#rules","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/domain/stores/PermissionsStore/rules ","version":"Next","tagName":"h2"},{"title":"Использование rules​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-rules","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore/PaymentPolicyStore.ts#L33 ","version":"Next","tagName":"h3"},{"title":"Использование permissions в UIStore​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-permissions-в-uistore","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/modules/books/features/BookList/UIStore/UIStore.ts#L76 ","version":"Next","tagName":"h2"},{"title":"Подготовка данных​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#подготовка-данных","content":" https://github.com/kaluga-astral/vite-boilerplate/blob/main/application/app.tsx#L44 ","version":"Next","tagName":"h2"},{"title":"Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#route-guards","content":" https://github.com/kaluga-astral/vite-boilerplate/tree/main/modules/permissions/features/routeGuards ","version":"Next","tagName":"h2"},{"title":"Использование Route Guards​","type":1,"pageTitle":"Пример реализации паттерна","url":"/guides/docs/permissions/example#использование-route-guards","content":" admin pagebook reading page ","version":"Next","tagName":"h3"},{"title":"Вдохновлено ABAC и XAML","type":0,"sectionRef":"#","url":"/guides/docs/permissions/core","content":"","keywords":"","version":"Next"},{"title":"На клиенте нужен ABAC, даже если на бэкенде RBAC​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#на-клиенте-нужен-abac-даже-если-на-бэкенде-rbac","content":" В этой статье вы можете прочитать чем концептуально отличаются ABAC (Attribute-Based Access Control) и RBAC (Role Based Access Control). На Frontend'е нужна такая система доступов, которая однозначно будет указывать на предмет блокировок доступов в контексте пользовательского интерфейса. RBAC и даже ABAC, имплементированный на стороне API не будет зависеть от UI, который привносит свою дополнительную специфичность при расчете доступов. В связи с этим, на клиенте необходимо перманентно использовать ABAC, доступы которого будут напрямую связаны со специфичностью UI. ","version":"Next","tagName":"h2"},{"title":"Пример с RBAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-rbac-на-бэкенде","content":" Предметная область ЭДО Роли PaymentAccountFreeAccount Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если у него есть созданная организация. Проблема Из требования видно, что для вычисления доступа не хватает только одного знания о роле пользователя (роль PaymentAccount), необходимо дополнительно учитывать есть у пользователя организация. Неверное решение Добавить к кнопке дополнительный if на проверку организации. Это приведет к "размазыванию" логики доступов по приложению и последующую потерю контроля. Правильное решение Использование ABAC с permission docActions, который внутри будет проверять роль пользователя и наличие организации.docActions будет использоваться в необходимых частях приложения для проверки доступа к действиям на документом. ","version":"Next","tagName":"h3"},{"title":"Пример с ABAC на бэкенде​","type":1,"pageTitle":"Вдохновлено ABAC и XAML","url":"/guides/docs/permissions/core#пример-с-abac-на-бэкенде","content":" Предметная область ЭДО Permissions с API docActions Бизнес требование Кнопка "Создать документ" доступна для пользователя с платным аккаунтом и если он прошел двух факторную аутентификацию. Проблема В docActions на бэкенде проверяется оплачен ли аккаунт пользователя, но проверку на 2FA можно провести только в runtime при нажатии на саму кнопку. Решение Добавить в едином клиентском сервисе доступов дополнительную логику для docActions, которая будет проверять 2FA. ","version":"Next","tagName":"h3"},{"title":"Intro","type":0,"sectionRef":"#","url":"/guides/docs/permissions/intro","content":"","keywords":"","version":"Next"},{"title":"Необходимо применять когда​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#необходимо-применять-когда","content":" В системе уже реализована какая-либо система доступов без централизованного управления на клиентеAPI предоставляет сведения о ролях. Паттерн работает в связке с ролевой модельюAPI предоставляет сведения о доступах. Паттерн расширяет на клиенте доступы, полученные из APIНа клиенте необходимо по условию (любому) закрывать доступ к части функционалаБизнес-требования описывают доступность функционала при определенных условиях (роль, сведения об оплате...) ","version":"Next","tagName":"h2"},{"title":"Применение паттерна позволяет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#применение-паттерна-позволяет","content":" Уменьшить затраты на разработку системы доступовИметь единую реализацию системы доступов во всех приложениях компанииЦентрализованно развивать паттернИзбежать повторения одних и тех же ошибок реализации в разных приложениях ","version":"Next","tagName":"h2"},{"title":"Паттерн предоставляет​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#паттерн-предоставляет","content":" Удобный и поддерживаемый способ формирования доступов на клиентеСистему причин отказа в доступе. Позволяет улучшить UX и DX при работе с доступами: пользователь и разработчик получают конкретную причину отказа в доступеПодход загрузки данных для формирования доступовЗакрытие рутов приложения (RouteGuards)Взаимодействие с другими сервисами. Например, FeatureToggle ","version":"Next","tagName":"h2"},{"title":"Готовый пакет @astral/permissions​","type":1,"pageTitle":"Intro","url":"/guides/docs/permissions/intro#готовый-пакет-astralpermissions","content":" Для более простой поддержки паттерна был реализован пакет @astral/permissions, который используется в примерах данной документации. ","version":"Next","tagName":"h2"},{"title":"Feature Toggle и Permissions","type":0,"sectionRef":"#","url":"/guides/docs/permissions/featureToggle","content":"","keywords":"","version":"Next"},{"title":"Permissions может использовать Feature Toggle​","type":1,"pageTitle":"Feature Toggle и Permissions","url":"/guides/docs/permissions/featureToggle#permissions-может-использовать-feature-toggle","content":" Permissions может использовать Feature Toggle только в том случае, если Feature Toggle предоставляет Permissioning Toggles. В противном случае Feature Toggle должен использоваться отдельно от Permissions. ","version":"Next","tagName":"h2"},{"title":"2FA (Two-factor Auth)","type":0,"sectionRef":"#","url":"/guides/docs/permissions/2fa","content":"","keywords":"","version":"Next"},{"title":"Пример​","type":1,"pageTitle":"2FA (Two-factor Auth)","url":"/guides/docs/permissions/2fa#пример","content":" Требования Создание документа доступно только администратору с активной 2FA. Реализация modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, private readonly twoFA: TwoFAService, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { // Если twoFA не пройдена, то отказываем в доступе с причиной, которая будет обработана в features // Также, по необходимости, можно вызвать логику запроса от пользователя прохождения 2FA if (!twoFA.isPassed) { return deny(PermissionDenialReason.TwoFA); } if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor( private readonly permissions: PermissionsStore, private readonly twoFA: TwoFAService, private readonly notifyService: Notify, private readonly router: Router, ) { makeAutoObservable(this, {}, { autoBind: true }); } public openDocCreation = () => { const permission = this.permissions.administration.administrationActions; if (permission.isAllowed) { this.router.push(APP_ROUTES.createDoc.getRedirectPath()); return; } if (permission.hasReason(PermissionDenialReason.NoAdmin)) { this.notifyService.error( 'Доступно только администратору' ); return; } if (permission.hasReason(PermissionDenialReason.TwoFA)) { // Здесь можно, например, реализовать открытие модалки для 2FA this.notifyService.error( 'Нужно пройти 2FA', ); return; } this.notifyService.error( 'Добавить документ на полку нельзя. Попробуйте сменить аккаунт', ); }; } ","version":"Next","tagName":"h2"},{"title":"Единый Permissions Module","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsModule","content":"","keywords":"","version":"Next"},{"title":"Состав permissions модуля​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#состав-permissions-модуля","content":" Логика формирования доступовТипы доступных в приложении доступовПричины отказа в доступахЛогика блокировки рутов приложения ","version":"Next","tagName":"h2"},{"title":"Причины концентрации логики доступов в одном модуле​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#причины-концентрации-логики-доступов-в-одном-модуле","content":" Контроль доступов приложения в одной точкеРасчет доступов, в большинстве случаев, связан с данными, которые необходимо получать из других модулей. Если формировать доступы на уровне конкретного модуля, то возникнет нежелательное зацепление между модулямиДоступы, мнимо относящиеся к разным модулям, будут использованы в других модулях, что также породит нежелательное зацеплениеПравила, позволяющие вычислять доступы, должны быть переиспользованы. Хранение правил в одном модуле позволит избежать зацепления модулейПричины отказа в доступе и логика для расчета доступов должна использоваться между доступами. Не централизованное хранение причин отказа и логики приведен к высокому зацеплению в системеВозможность централизованной подготовки данных для формирования базовых доступов ","version":"Next","tagName":"h2"},{"title":"Пример с нежелательным зацеплением​","type":1,"pageTitle":"Единый Permissions Module","url":"/guides/docs/permissions/permissionsModule#пример-с-нежелательным-зацеплением","content":" Требования Кнопка "Добавить документ" доступна только если есть подключенная организацияКнопка "Удалить организацию" доступна только если в рамках данной организации не было создано документов Решение с зацеплением Модуль docs реализует доступ docActions, который импортирует логику из модуля organization для проверки данных об организации. Модуль organization реализует доступ deletingOrganization, который импортирует логику из модуля docs для проверки данных о документах. Получаем циклическую зависимость и зацепление между модулями. Решение без зацепления Модуль permissions содержит доступы docActions и deletingOrganization, импортируя логику из модулей docs и organization. Модуль docs и organization теперь не зацеплены между собой. ","version":"Next","tagName":"h3"},{"title":"Policies. Политики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/policies","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#местоположение","content":" Все политики находятся в директории policies: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | | |── AdministrationPolicyStore/ | | | | | |── BooksPolicyStore/ | | | | | |── PaymentPolicyStore/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts Policies являются частью имплементации PermissionStore, поэтому находятся внутри него. ","version":"Next","tagName":"h2"},{"title":"Создание политик​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#создание-политик","content":" ","version":"Next","tagName":"h2"},{"title":"Политики напрямую связаны с модулями системы​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#политики-напрямую-связаны-с-модулями-системы","content":" Modules - это предметные подобласти предметной области проекта. Permissions внутри policies работают в рамках предметных подобласть проекта, поэтому policies должны соответствовать названию modules. Примеры Permission administrationActions концептуально относится к модулю administration, поэтому создается AdministrationPolicyPermission readingBook концептуально относится к модулю books, поэтому создается BooksPolicy ","version":"Next","tagName":"h3"},{"title":"Пример создания с использованием @astral/permissions​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#пример-создания-с-использованием-astralpermissions","content":" modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager.createPolicy создает политику, которая позволит в дальнейшем создавать permissions this.policy = this.policyManager.createPolicy({ name: 'administration', // Метод для подготовки данных необходимых для формирования доступов AdministrationPolicy prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } } ","version":"Next","tagName":"h3"},{"title":"Доступ к политикам через единую точку PermissionsStore​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#доступ-к-политикам-через-единую-точку-permissionsstore","content":" PermissionsStore - это singleton и единая входная точка в приложении для получения информации о доступах. Другие модули приложения взаимодействуют именно с PermissionStore. Пример реализации: import { makeAutoObservable } from 'mobx'; import { billingRepository, userRepository } from '@example/data'; import type { BillingRepository, UserRepository } from '@example/data'; // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; import { createAdministrationPolicyStore, createBooksPolicyStore, createPaymentPolicyStore, } from './policies'; import type { AdministrationPolicyStore, BooksPolicyStore, PaymentPolicyStore, } from './policies'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } // singleton export const permissionsStore = new PermissionsStore( billingRepository, userRepository, ); Пример использования: export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } Мотивация Возможность централизованной подготовки данных для формирования permissionsВозможность реализации логирования для дебагингаУвеличение DX за счет отказа от необходимо импорта разных policies ","version":"Next","tagName":"h2"},{"title":"Переиспользование логики между policies​","type":1,"pageTitle":"Policies. Политики доступов","url":"/guides/docs/permissions/policies#переиспользование-логики-между-policies","content":" Policies не должны зависеть друг от друга и соответственно переиспользовать permissions потому. Переиспользование permissions между policies приводит к пересечению бизнес требований и запутанной логике формирования доступов. Если между policies необходимо переиспользовать логику, то надо использовать rules. ","version":"Next","tagName":"h2"},{"title":"Reasons. Причины отказа в доступе","type":0,"sectionRef":"#","url":"/guides/docs/permissions/reasons","content":"","keywords":"","version":"Next"},{"title":"Пример использования​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#пример-использования","content":" Требования Пользователь не может добавить книгу на свою полку, если: Аккаунт не оплаченПревышено доступное количество книг, которое можно добавить на полку Если у пользователя не оплачен аккаунт, то при нажатии на кнопку "Добавить на полку" должна открыться модалка с предложением об оплате. Если пользователь достиг предел добавленных книг на полку, то необходимо отобразить уведомление "Достигнуто максимальное количество книг на полке". Решение modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicy // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } modules/books/features/BookCard/UIStore // В реальном коде для импорта из другого модуля необходимо использовать external файл import { PermissionDenialReason, PermissionsStore, permissionsStore, } from '@example/modules/permissions'; export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this, {}, { autoBind: true }); } public addToShelf = () => { if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${this.bookId} добавлена на полку`); return; } if (this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.NoPay)) { this.openPaymentAccount(); return; } if ( this.permissions.books.addingToShelf.hasReason(PermissionDenialReason.ExceedReadingCount) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } export const createUIStore = (bookId: string) => new UIStore(bookId, permissionsStore, notify); modules/books/features/BookCard/BookCard.tsx type Props = { id: string; }; export const BookCard = observer(({ id }: Props) => { const [{ addToShelf, isOpenPayAccount, closePayAccount }] = useState(() => createUIStore(id)); return ( <> <Container> <BookInfo /> <Button onClick={addToShelf}>Добавить на полку</Button> </Container> <PayAccountModal isOpen={isOpenPayAccount} onClose={closePayAccount} /> </> ); }); ","version":"Next","tagName":"h2"},{"title":"Все reasons хранятся в одном enum​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#все-reasons-хранятся-в-одном-enum","content":" Одни и те же причины отказа переиспользуются между разными permissions и policies. Все reasons необходимо хранить в одном enum для того, чтобы не создавать дополнительные сложности декомпозиции при росте причин. Reasons должны располагаться в modules/permissions/domain/enums.ts: export enum PermissionDenialReason { /** * Не является администратором * **/ NoAdmin = 'no-admin', /** * Аккаунт не оплачен * **/ NoPayAccount = 'no-pay-account', } Пакет @astral/permissions содержит дополнительные системные причины отказа, которые могут произойти из-за ошибок в коде: export enum SystemDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = 'internal-error', /** * Недостаточно данных для формирования доступа * **/ MissingData = 'missing-data', } Для централизованного хранения reasons, необходимо объединить SystemDenialReason и reasons нашего модуля: import { SystemDenialReason } from '@astral/permissions'; export enum PermissionsDenialReason { /** * При расчете доступа произошла ошибка * **/ InternalError = SystemDenialReason.InternalError, /** * Недостаточно данных для формирования доступа * **/ MissingData = SystemDenialReason.MissingData, /** * Пользователь не является админом * **/ NoAdmin = 'no-admin', } ","version":"Next","tagName":"h2"},{"title":"Соглашения​","type":1,"pageTitle":"Reasons. Причины отказа в доступе","url":"/guides/docs/permissions/reasons#соглашения","content":" Для каждого reason должен быть оставлен комментарий в виде jsdoc о предназначении данного reasonЗначения reasons должны быть String в формате kebab-case ","version":"Next","tagName":"h2"},{"title":"Подготовка данных для доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/preparingData","content":"","keywords":"","version":"Next"},{"title":"Каждая policy указывает какие данные нужны для доступов​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#каждая-policy-указывает-какие-данные-нужны-для-доступов","content":" Каждая policy определяет метод подготовки данных, которые нужны для формирования запросов. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#пример","content":" В BooksPolicy для формирования доступа addingToShelf требуются данные из UserRepository и BillingRepository. При создании policy необходимо указать как получить эти данные: // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', // prepareData будет вызван одновременно с другими policy посредством policyManager prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } ","version":"Next","tagName":"h3"},{"title":"PermissionsStore.prepareData подготовит данные для всех policy​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#permissionsstorepreparedata-подготовит-данные-для-всех-policy","content":" PermissionsStore должен иметь метод prepareData, который вызовет подготовку данных в каждом policy: // В реальном коде @astral/permissions необходимо реэкспортировать через shared import type { PolicyManagerStore } from '@astral/permissions'; import { createPolicyManagerStore } from '@astral/permissions'; /** * Содержит все доступы приложения */ export class PermissionsStore { private readonly policyManager: PolicyManagerStore; public readonly administration: AdministrationPolicyStore; public readonly books: BooksPolicyStore; constructor(billingRepo: BillingRepository, userRepo: UserRepository) { makeAutoObservable(this, {}, { autoBind: true }); // policyManager регистрирует все доступы и позволяет подготовить данные для формирования доступов this.policyManager = createPolicyManagerStore(); this.administration = createAdministrationPolicyStore( this.policyManager, userRepo, ); this.books = createBooksPolicyStore( this.policyManager, billingRepo, userRepo, ); } /** * Подготавливает данные для формирования доступов */ public prepareData = () => this.policyManager.prepareDataSync(); public get preparingDataStatus() { return this.policyManager.preparingDataStatus; } } За подготовку данных отвечает PolicyManagerStore. PolicyManagerStore регистрирует для каждого policy метод подготовки prepareDataи при вызове policyManager.prepareData запускает вызов каждой prepareData каждого policy Мотивация использования единого метода подготовки данных Выбран подход использования единого метода для загрузки данных для того, чтобы соблюдать баланс между сложностью использования и оптимизацией загрузки данных: Если вызывать для каждой policy или для каждого permission отдельный метод загрузки данных, то все фичи приложения, использующие доступы, должны будут быть обернуты в ContentStateНеобходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения ","version":"Next","tagName":"h2"},{"title":"Использование​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#использование","content":" PermissionsStore.prepareData необходимо вызывать в application слое приложения: application/app.tsx export const App = observer(() => { const renderRoutes = useRoutes(routes); const permissionsStatus = permissionsStore.preparingDataStatus; useEffect(() => { permissionsStore.prepareData(); authStore.addProtectedHttpClients([apiHttpClient]); }, []); return ( <ThemeProvider theme={theme}> <NotificationContainer /> <ContentState isError={permissionsStatus.isError} isLoading={permissionsStatus.isLoading} errorState={{ errorList: [permissionsStatus.error], onRetry: permissionsStore.prepareData, }} > <MainLayout>{renderRoutes}</MainLayout> </ContentState> </ThemeProvider> ); }); Не рекомендуется рендерить приложение, пока данные для permissions не будут успешно подготовлены. ","version":"Next","tagName":"h3"},{"title":"Оптимизация PermissionsStore.prepareData​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#оптимизация-permissionsstorepreparedata","content":" Необходимо следить за запросами, которые вызываются в методах подготовки данных - они не должны быть медленными потому, что блокируют рендеринг приложения. Запросы могут использоваться в prepareData, если: Запрашиваемые данные нужны для рендеринга приложения не только в PermissionsStoreЗапрашиваемые данные значительно не влияют на блокировку рендера приложения Если запросы являются не оптимальными для использования в PermissionsStore, то для формирования permissions необходимо использовать методы, принимающие на вход данные: import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } В таком случае за получение данных будет ответственна та часть приложения, которая будет использовать permission: modules/books/features/BookCard/UIStore export class UIStore { public isOpenPayAccount = false; constructor( private readonly bookId: string, private readonly permissions: PermissionsStore, private readonly notifyService: Notify, private readonly booksRepo: BooksRepository ) { makeAutoObservable(this, {}, { autoBind: true }); } private get bookByIdQuery() { return this.booksRepo.getBookByIdQuery(this.bookId); } public buy = () => { const payPermission = this.permissions.calcPayment(this.bookByIdQuery.acceptableAge); if (payPermission.isAllowed) { this.notifyService.success(`Книга ${bookId} оплачена`); return; } if (payPermission.hasReason(PermissionDenialReason.NotAcceptAge)) { this.notifyService.error('Вы слишком молоды'); return; } this.notifyService.error( 'Купить книгу нельзя. Попробуйте перезагрузить страницу', ); }; public openPayAccount = () => { this.isOpenPayAccount = true; }; public closePayAccount = () => { this.isOpenPayAccount = false; }; } ","version":"Next","tagName":"h2"},{"title":"Обработка проблем получения данных​","type":1,"pageTitle":"Подготовка данных для доступов","url":"/guides/docs/permissions/preparingData#обработка-проблем-получения-данных","content":" Если перед использованием permissions в features, не были успешно загружены данные, то permissions будут возвращать объект с конкретным reason: type DenialMissingDataPermission = { isAllowed: false; reason: PermissionDenialReason.MissingData; }; Reason PermissionDenialReason.MissingData можно будет при необходимости обработать централизованно или на месте использования permissions. ","version":"Next","tagName":"h2"},{"title":"Формирование доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/permissionsFormation","content":"","keywords":"","version":"Next"},{"title":"Как выделять permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#как-выделять-permission","content":" Требование является permission, если: Требование указывает на то, что функционал приложения должен быть ограничен на основе данных об аккаунте (роль, организация, оплата...)Описанное ограничение может быть снято при изменении данных пользователя Permission не является: Временный Feature Toggle на функционалПерманентное условие на блокировку функционала, без возможности открытия доступа (даже при изменении роли пользователя)Условия (if) в коде, реализующие рядовые бизнес требования ","version":"Next","tagName":"h2"},{"title":"Примеры требований​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#примеры-требований","content":" Кнопка "Создать документ" доступна только администратору - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если изменить роль пользователя. Кнопка "Редактировать документ" доступна только для пользователей с платным аккаунтом и добавленной организацией - это permission потому, что ограничение основывается на данных пользователя и доступ к функционалу можно открыть, если оплатить аккаунт и добавить организацию. Кнопка "Создать документ" заблокирована до 20.05.2024 - это не permission, а feature toggle. Требование не зависит от данных пользователя. При этом: Кнопка "Создать документ" для пользователей с тарифом "Базовый" заблокирована до 20.05.2024 - это уже permission потому, что основывается на данных пользователя. Кнопка "Отправить" заблокирована, если чекбокс "Ознакомлен с требованиями" не активен - это не permission. Это требование для формы. ","version":"Next","tagName":"h3"},{"title":"Создание permissions посредством @astral/permissions​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#создание-permissions-посредством-astralpermissions","content":" Permissions создаются только внутри policy с помощью метода policy.createPermission: modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore import { makeAutoObservable } from 'mobx'; import type { UserRepository } from '@example/data'; import { PermissionDenialReason } from '../../../../enums'; // @astral/permissions в реальном коде должен реэкспортироваться через shared import { PolicyManagerStore, Policy } from '@astral/permissions'; export class AdministrationPolicyStore { private readonly policy: Policy; constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { // разрешает доступ return allow(); } // запрещает доступ с конкретной причиной deny(PermissionDenialReason.NoAdmin); }); } } ","version":"Next","tagName":"h2"},{"title":"API Permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#api-permission","content":" createPermission возвращает объект вида: type Permission = { isAllowed: boolean; /** * Причина отказа в доступе */ reason?: string; /** * @example permission.hasReason(DenialReason.NoAdmin) */ hasReason: (reason: string) => boolean; }; О причинах отказа читайте далее. ","version":"Next","tagName":"h3"},{"title":"Пример реализации и использования permission​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример-реализации-и-использования-permission","content":" Требования Кнопка "Создать книгу" в Sidebar отображается только если пользователь является администратором. Решение modules/permissions/domain/stores/PermissionsStore/policies/AdministrationPolicyStore class AdministrationPolicyStore { constructor( private readonly policyManager: PolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policyManager.createPolicy({ name: 'administration', prepareData: async (): Promise<void> => { await Promise.all([this.userRepo.getRolesQuery().async()]); }, }); } /** * Доступ к действиям администратора */ public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } В features необходимо избегать разрешения доступов через абстрактные компоненты вида: import { observer } from 'mobx-react-lite'; import { permissionsStore } from '@example/modules/permissions'; export const Sidebar = observer(() => { return ( <Sidebar> <PermissionsGateway permission={permissionsStore.administration.administrationActions} allow={ <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> } /> </Sidebar> ); }); Использование компонентов вроде PermissionsGateway переносит логику доступов для фичи в UI слой, что нарушает архитектурную концепцию. Разрешение доступов должно происходить в UIStore: modules/layout/features/MainLayout/Sidebar/UIStore export class UIStore { constructor(private readonly permissions: PermissionsStore) { makeAutoObservable(this, {}, { autoBind: true }); } public get isAllowedBookCreation() { return this.permissions.administration.administrationActions.isAllowed; } } modules/layout/features/MainLayout/Sidebar/Sidebar.tsx export const Sidebar = observer(() => { const [{ isAllowedBookCreation }] = useState(createUIStore); return ( <Sidebar> <SidebarItem> {isAllowedBookCreation && ( <RouterLink to={APP_ROUTES.createBook.getRedirectPath()}> Создать книгу </RouterLink> )} </SidebarItem> </Sidebar> ); }); ","version":"Next","tagName":"h2"},{"title":"Permission не должен зависеть от UI​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#permission-не-должен-зависеть-от-ui","content":" Permission не должен напрямую зависеть и указывать на UI, который блокируется. Зависимость от UI приведет к взрывному росту permissions и в последствии к сложной поддержке кода. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#пример","content":" Кнопка "Создать документ" отображается только если пользователь является администратором - в данном требовании присутствует указать на конкретную кнопку. Неправильное решение​ Создать permission showCreationDocButton: class AdministrationPolicyStore { ... public get showCreationDocButton() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get allowAdministrationRoute() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } public get showEditingDocModal() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Как видно из примера, при связывании permission и UI происходит взрывной рост одинаковых доступов: Доступ к кнопкеДоступ к рутуДоступ к модалке редактирования Правильное решение​ Создать абстрактный permission administrationActions, который будет закрывать доступ к действиям администратора: class AdministrationPolicyStore { ... public get administrationActions() { return this.policyManager.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } deny(PermissionDenialReason.NoAdmin); }); } } Теперь на уровне features необходимо проверять administrationActions и на основе его выполнять необходимые действия. ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг","content":" Название permission должно отвечать на вопрос: "Доступ открыт/закрыт для чего/к чему?". Примеры Доступ закрыт к действиям администратора - administrationActionsДоступ закрыт к чтению книги онлайн - readingBookДоступ закрыт к управлению организацией - organizationManagement ✅ Valid public get administrationActions() { ... } public get addingToShelf() { ... } public get readingBook() { ... } public get organizationManagement() { ... } ❌ Invalid public get canReadingBook() { ... } public get isAddToShelf() { ... } ","version":"Next","tagName":"h2"},{"title":"Нейминг методов для вычисления доступов​","type":1,"pageTitle":"Формирование доступов","url":"/guides/docs/permissions/permissionsFormation#нейминг-методов-для-вычисления-доступов","content":" Для методов, которые вычисляют доступы, добавляется префикс calc. ✅ Valid public calcReadingBook = (bookId: string) => { ... } ❌ Invalid public checkReadingBook = (bookId: string) => { ... } ","version":"Next","tagName":"h3"},{"title":"Route Guards. Доступы к рутам приложения","type":0,"sectionRef":"#","url":"/guides/docs/permissions/routes","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#местоположение","content":" Все Route Guards хранятся в modules/permissions/features/routeGuards: ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Guard вызывается для каждой page​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#guard-вызывается-для-каждой-page","content":" Route Guard должен вызываться на каждой page, которая должна быть защищена доступами. МотивацияВызов Route Guard для каждого page позволяет достичь простоты поддержки. При исследовании pages сразу видна связь страницы и доступов. Использование конфигурации с описанием доступных рутов в модуле permissions значительно усложняет понимание кода и простоту поддержки функционала. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример","content":" Необходимо закрыть pages: admin/createBookbook/reading ├── application/ | ├── pages/ | | ├── admin/ | | | ├── createBook.tsx | | ├── book/ | | | ├── reading.tsx ├── modules/ | ├── permissions/ | | ├── features/ | | | ├── routesGuards/ | | | | ├── AdminRouteGuard/ | | | | ├── ReadingBookRouteGuard/ | | | | └── index.ts | | | └── index.ts | | └── index.ts application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; application/pages/book/reading.tsx import { NotFoundScreen, ReadingBookScreen } from '@example/screens'; import { useRouterParams } from '@example/shared'; import { ReadingBookRouteGuard } from '@example/modules/permissions'; const ReadingBookPage = () => { const { id } = useRouterParams(); if (!id) { return <NotFoundScreen title="Книга не найдена" />; } return ( <ReadingBookRouteGuard id={id}> <ReadingBookScreen id={id} /> </ReadingBookRouteGuard> ); }; export default ReadingBookPage; ","version":"Next","tagName":"h3"},{"title":"Вложенные страницы​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#вложенные-страницы","content":" Использование Route Guard для каждой страницы создает небольшой overhead: для каждой вложенной страницы необходимо вызывать Route Guard, возможности закрыть всю вложенность нет. Данное ограничение принимается в угоду более простой поддержки. ","version":"Next","tagName":"h3"},{"title":"Создание Route Guard​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#создание-route-guard","content":" В modules/permissions/features/routeGuards необходимо создать Route Guard, который будет закрывать конкретную страницу или ряд страниц. Реализация зависит от требований. Все Route Guard создаются на основе абстрактного PermissionRouteGuard. PermissionRouteGuard - фасад, позволяющий упростить реализацию Route Guards и обработать стандартные причины отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-1","content":" Требования Страница создания книги (admin/createBook) должна быть доступна только администратору. Реализация В AdministrationPolicy уже реализован permissions - administrationActions, на основе которого можно делать вывод доступна ли пользователю страница создания книги. На момент реализации, все вложенные руты в /admin подходят под administrationActions permission, поэтому реализуем единый для всех /admin/ Guard: modules/permissions/features/routeGuards/AdminRouteGuard import type { ReactNode } from 'react'; import { observer } from 'mobx-react-lite'; import { PageLayout, Placeholder } from '@example/shared'; import { PermissionDenialReason, permissionsStore } from '../../../domain'; import { PermissionGuard } from '../../PermissionGuard'; type Props = { children: ReactNode; }; export const AdminRouteGuard = observer(({ children }: Props) => { return ( <PermissionGuard permission={permissionsStore.administration.administrationActions} denialSwitch={{ [PermissionDenialReason.NoAdmin]: ( <PageLayout header={{ title: 'Панель администратора' }} content={{ children: ( <Placeholder title="Доступно только для администраторов" /> ), }} /> ), }} > {children} </PermissionGuard> ); }); denialSwitch позволяет обработать причины отказа. В данном случае, если причина отказа 'no-admin', то необходимо показать соответствующий Placeholder. Закрывает требуемую страницу приложения: application/pages/admin/createBook.tsx import { CreationBookScreen } from '@example/screens'; import { AdminRouteGuard } from '@example/modules/permissions'; const CreateBookPage = () => { return ( <AdminRouteGuard> <CreationBookScreen /> </AdminRouteGuard> ); }; export default CreateBookPage; ","version":"Next","tagName":"h3"},{"title":"Обработка дефолтных причин отказа в доступе​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#обработка-дефолтных-причин-отказа-в-доступе","content":" В PermissionRouteGuard можно обработать дефолтные причины для отказа. ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Route Guards. Доступы к рутам приложения","url":"/guides/docs/permissions/routes#пример-2","content":" import { Placeholder } from '@example/shared'; import type { Permission } from '../../domain'; import { PermissionDenialReason } from '../../domain'; type Props = { permission: Permission; /** * Позволяет отрендерить компонент для конкретной причины отказа в доступе */ denialSwitch: Record<string, ReactNode>; children: ReactNode; }; /** * Закрывает доступ к children, обрабатывает дефолтные причины отказа */ export const PermissionGuard = ({ permission, denialSwitch, children, }: Props) => { if (permission.isAllowed) { return children; } if (denialSwitch[permission.reason]) { return denialSwitch[permission.reason]; } if (permission.reason === PermissionDenialReason.NoPayAccount) { return <Placeholder title="Необходимо оплатить аккаунт" />; } if (permission.reason === PermissionDenialReason.MissingUserAge) { return <Placeholder title="Необходимо заполнить дату рождения в ЛК" />; } return <Placeholder title="Нет доступа" />; }; ","version":"Next","tagName":"h3"},{"title":"Rules. Переиспользование логики доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/rules","content":"","keywords":"","version":"Next"},{"title":"Местоположение​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#местоположение","content":" Все правила находятся в директории rules: ├── modules/ | ├── permissions/ | | ├── stores/ | | | ├── PermissionsStore/ | | | | ├── policies/ | | | | ├── rules/ | | | | | |── calcAcceptableAge/ | | | | | |── calcAccountPayment/ | | | | | └── index.ts | | | ├── PermissionsStore.ts | | | └── index.ts | | ├── enums.ts | | └── index.ts ","version":"Next","tagName":"h2"},{"title":"Rules - приватные функции модуля permissions​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#rules---приватные-функции-модуля-permissions","content":" Rules недоступны вне permissions модуля и являются частью имплементации PermissionsStore. ","version":"Next","tagName":"h2"},{"title":"Реализация rules​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#реализация-rules","content":" Rules создаются с помощью createRule из пакета @astral/permissions: ","version":"Next","tagName":"h2"},{"title":"Пример​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#пример","content":" Требования Чтение книги доступно только если возраст пользователя соответствует доступному возрасту, указанному в книгеПокупка товара доступна только если возраст пользователя соответствует доступному возрасту, указанному в товаре Решение Требуется реализовать два permissions: calcReadingBook и calcPayment. Оба permissions должны реализовать одну и ту же логику проверки возраста пользователя. Необходимо реализовать rule: calcAcceptableAge: modules/permissions/domain/stores/PermissionsStore/rules/calcAcceptableAge // @astral/permissions в реальном коде необходимо реэкспортировать через shared import { createRule } from '@astral/permissions'; export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if (getDateYearDiff(new Date(userBirthday), new Date()) < acceptableAge) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); Далее PaymentPolicyStore и BooksPolicyStore используют calcAcceptableAge для вычисления доступов: modules/permissions/domain/stores/PermissionsStore/policies/PaymentPolicyStore import { calcAcceptableAge } from '../../rules'; export class PaymentPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'payment', prepareData: async () => { await Promise.all([userRepo.getPersonInfoQuery().async()]); }, }); } /** * Возможность оплатить товар */ public calcPayment = (acceptableAge: number) => this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } allow(); }); } modules/permissions/domain/stores/PermissionsStore/policies/BooksPolicyStore import { calcAcceptableAge } from '../../rules'; export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PermissionsPolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.userRepo.getPersonInfoQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность прочитать книгу онлайн */ public calcReadingOnline = (acceptableAge?: number) => { return this.policy.createPermission((allow, deny) => { const agePermission = calcAcceptableAge( acceptableAge, this.userRepo.getPersonInfoQuery().data?.birthday, ); if (!agePermission.isAllowed) { return deny(agePermission.reason); } const billingInfo = this.billingRepo.getBillingInfoQuery().data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } allow(); }); }; } ","version":"Next","tagName":"h3"},{"title":"Нейминг​","type":1,"pageTitle":"Rules. Переиспользование логики доступов","url":"/guides/docs/permissions/rules#нейминг","content":" Все rules имеют префикс calc. ✅ Valid /** * Вычислить админские доступы */ const calcAdminPermissions = (role: string) => {...}; /** * Вычислить доступность возраста */ const calcAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ❌ Invalid const checkAdminRole = (role: string) => {...}; const checkAcceptableAge = (acceptableAge: string?, userBirthday?: string) => {...}; ","version":"Next","tagName":"h2"},{"title":"Принципы тестирования доступов","type":0,"sectionRef":"#","url":"/guides/docs/permissions/testing","content":"","keywords":"","version":"Next"},{"title":"Алгоритм покрытия Policy тестами​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#алгоритм-покрытия-policy-тестами","content":" Пример policy: export class BooksPolicyStore { private readonly policy: PermissionsPolicy; constructor( policyManager: PolicyManagerStore, private readonly billingRepo: BillingRepository, private readonly userRepo: UserRepository, ) { makeAutoObservable(this, {}, { autoBind: true }); this.policy = policyManager.createPolicy({ name: 'books', prepareData: async () => { await Promise.all([ this.userRepo.getRolesQuery().async(), this.billingRepo.getBillingInfoQuery().async(), ]); }, }); } /** * Возможность добавить на полку книгу */ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } allow(); }); } } На каждый permission, определенный в policy, необходимо писать тесты. Для каждого permission необходимо создавать отдельный describe​ describe('AdministrationPolicyStore', () => { describe('Добавление книги на полку', () => {}); }); Для каждого permission необходимо обработать положительные и отрицательные кейсы​ Формирование кейсов происходит в соответствии с вызовом allow и deny в коде: public get addingToShelf() { return this.policy.createPermission((allow, deny) => { // Тест-кейс: Доступно администратору if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; // Тест-кейс: Недоступно, если аккаунт не оплачен if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } // Тест-кейс: Недоступно, если превышено количество добавлений if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Тест-кейс: Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке allow(); }); } Реализуемые тест-кейсы: describe('BooksPolicyStore', () => { describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); it('Недоступно, если аккаунт не оплачен', async () => {}); it('Недоступно, если превышено количество добавлений', async () => {}); it('Недоступно, если достигнуто максимальное количество добавлений', async () => {}); it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => {}); }); }); Перед началом выполнения теста необходимо всегда вызывать prepareData​ PolicyManagerStore поддерживает асинхронный вызов prepareData - prepareDataAsync. describe('BooksPolicyStore', () => { const setup = async ({ isAdmin, billingInfo, }: { isAdmin: boolean; billingInfo?: Partial<BillingRepositoryDTO.BillingInfo>; }) => { const policyManager = createPolicyManagerStore(); const cacheService = createCacheService(); const userRepoMock = mock<UserRepository>({ getRolesQuery: () => cacheService.createQuery(['roles'], async () => ({ isAdmin, })), }); const billingRepoMock = mock<BillingRepository>({ getBillingInfoQuery: () => cacheService.createQuery(['billing'], async () => billingRepositoryFaker.makeBillingInfo(billingInfo), ), }); const sut = new BooksPolicyStore( policyManager, billingRepoMock, userRepoMock, ); await policyManager.prepareDataAsync(); return { sut }; }; describe('Добавление книги на полку', () => { it('Доступно администратору', async () => { const { sut } = await setup({ isAdmin: true }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); }); }); Если не вызвать prepareData, то все доступы будут недоступны. При тестировании отказа в доступе, необходимо проверять reason​ Тест-кейс Недоступно, если аккаунт не оплачен должен считаться пройденным только если reason соответствует PermissionDenialReason.NoPayAccount: it('Недоступно, если аккаунт не оплачен', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: false }, }); expect(sut.addingToShelf.isAllowed).toBeFalsy(); expect(sut.addingToShelf.reason).toBe( PermissionDenialReason.NoPayAccount, ); }); Финальный вызов allow или deny должен обрабатываться одним тест-кейсом​ public get addingToShelf() { return this.policy.createPermission((allow, deny) => { if (this.userRepo.getRolesQuery().data?.isAdmin) { return allow(); } const billingInfo = this.billingRepo.getBillingInfoQuery()?.data; if (!billingInfo?.paid) { return deny(PermissionDenialReason.NoPayAccount); } if ( billingInfo.info.shelf.currentCount >= billingInfo.info.shelf.allowedCount ) { return deny(PermissionDenialReason.ExceedShelfCount); } // Этот allow будет иметь один тест-кейс allow(); }); } Финальный вызов allow или deny должен аккумулировать условия, которые не описаны в коде: it('Доступно, если аккаунт оплачен и не превышено максимальное количество книг на полке', async () => { const { sut } = await setup({ isAdmin: false, billingInfo: { paid: true, info: billingRepositoryFaker.makeBillingDetails({ shelf: { currentCount: 1, allowedCount: 2 }, }), }, }); expect(sut.addingToShelf.isAllowed).toBeTruthy(); }); Мотивация Позволяет избежать роста количества тест-кейсов. ","version":"Next","tagName":"h2"},{"title":"Тестирование Rules​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-rules","content":" При тестировании rules необходимо: Покрыть тестами положительные и отрицательные сценарии. Допустима группировкаПри тестировании отказа в доступе проверять reasonПоследний вызов allow или deny покрывать один тест-кейсом export const calcAcceptableAge = ( acceptableAge?: number, userBirthday?: string, ) => createRule((allow, deny) => { if (!acceptableAge) { return deny(PermissionDenialReason.MissingData); } if (!userBirthday) { return deny(PermissionDenialReason.MissingUserAge); } if ( Math.abs(getDateYearDiff(new Date(userBirthday), new Date())) < acceptableAge ) { return deny(PermissionDenialReason.NotForYourAge); } allow(); }); describe('calcAcceptableAge', () => { describe('Доступа нет', () => { it('Если нет данных о доступном возрасте', () => { const permission = calcAcceptableAge(); expect(permission.isAllowed).toBeFalsy(); expect(permission.reason).toBe(PermissionDenialReason.MissingData); }); it('Если у пользователя не заполнена дата рождения', () => {}); it('Если возраст пользователя не соответствует допустимому', () => {}); }); it('Доступ открыт, если есть доступный возраст + день рождения пользователя и возраст соответствует допустимому', () => {}); }); ","version":"Next","tagName":"h2"},{"title":"Тестирование UIStore, использующего permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#тестирование-uistore-использующего-permissions","content":" Пример: Реализованный UIStore использует permissions.books.addingToShelf. Логика формирования addingToShelf уже протестирована в permissions module, поэтому в UIStore необходимо протестировать только реакцию на разрешение и отказ в доступе: export class UIStore { public isOpenAccountPayment = false; constructor( private readonly permissions: PermissionsStore, private readonly notifyService: Notify, ) { makeAutoObservable(this); } public addToShelf = (bookId: string) => { // Тест-кейс: Показывает информационное уведомление, если книга была успешно добавлена if (this.permissions.books.addingToShelf.isAllowed) { this.notifyService.info(`Книга ${bookId} добавлена на полку`); return; } // Тест-кейс: Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.NoPayAccount, ) ) { this.openPaymentAccount(); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений if ( this.permissions.books.addingToShelf.hasReason( PermissionDenialReason.ExceedReadingCount, ) ) { this.notifyService.error( 'Достигнуто максимальное количество книг на полке', ); return; } // Тест-кейс: Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа this.notifyService.error( 'Добавить книгу на полку нельзя. Попробуйте перезагрузить страницу', ); }; public openPaymentAccount = () => { this.isOpenAccountPayment = true; }; public closePaymentAccount = () => { this.isOpenAccountPayment = false; }; } Реализуемые тест-кейсы: describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { it('Показывает информационное уведомление, если книга была успешно добавлена', () => {}); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => {}); it('Показывает уведомление с ошибкой, если было превышено максимальное количество прочтений', () => {}); it('Показывает уведомление с ошибкой, если было произошла непредвиденная ошибка при вычислении доступа', () => {}); }); }); ","version":"Next","tagName":"h2"},{"title":"Мок permissions​","type":1,"pageTitle":"Принципы тестирования доступов","url":"/guides/docs/permissions/testing#мок-permissions","content":" Для подмены permissions необходимо использовать mockDeep из библиотеки vitest-mock-extended и createDenialPermission из @astral/permissions: import { mockDeep } from 'vitest-mock-extended'; import { createAllowedPermission, createDenialPermission } from '@astral/permissions'; describe('GoodsListStore', () => { describe('Добавление книги на полку', () => { const setup = (permissionsStoreMock: PermissionsStore) => { const notifyMock = mock<Notify>(); const sut = new UIStore(permissionsStoreMock, notifyMock); sut.addToShelf('id'); return { notifyMock, sut }; }; it('Показывает информационное уведомление, если книга была успешно добавлена', () => { // permissionsStoreMock делает addingToShelf доступным const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createAllowedPermission(), }, }); const { notifyMock } = setup(permissionsStoreMock); expect(notifyMock.info).toBeCalledWith('Книга id добавлена на полку'); }); it('Открывает модалку оплаты, если было отказано в доступе с соответствующей причиной', () => { // permissionsStoreMock делает addingToShelf недоступным с причиной NoPayAccount const permissionsStoreMock = mockDeep<PermissionsStore>({ books: { addingToShelf: createDenialPermission( PermissionDenialReason.NoPayAccount, ), }, }); const { sut } = setup(permissionsStoreMock); expect(sut.isOpenAccountPayment).toBeTruthy(); }); }); }); ","version":"Next","tagName":"h3"}],"options":{"languages":["en","ru"],"id":"default"}} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 739ffd6..160519f 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://kaluga-astral.github.io/guides/docs/category/permissions-%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B5weekly0.5https://kaluga-astral.github.io/guides/docs/introweekly0.5https://kaluga-astral.github.io/guides/docs/issuesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/2faweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/coreweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/exampleweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/featureToggleweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/introweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/permissionsFormationweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/permissionsModuleweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/policiesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/preparingDataweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/reasonsweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/routesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/rulesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/testingweekly0.5https://kaluga-astral.github.io/guides/weekly0.5 \ No newline at end of file +https://kaluga-astral.github.io/guides/docs/category/permissions-%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B5weekly0.5https://kaluga-astral.github.io/guides/docs/category/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-envweekly0.5https://kaluga-astral.github.io/guides/docs/env/archweekly0.5https://kaluga-astral.github.io/guides/docs/env/csrweekly0.5https://kaluga-astral.github.io/guides/docs/env/introweekly0.5https://kaluga-astral.github.io/guides/docs/env/safetyweekly0.5https://kaluga-astral.github.io/guides/docs/env/ssrweekly0.5https://kaluga-astral.github.io/guides/docs/introweekly0.5https://kaluga-astral.github.io/guides/docs/issuesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/2faweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/coreweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/exampleweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/featureToggleweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/introweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/permissionsFormationweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/permissionsModuleweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/policiesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/preparingDataweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/reasonsweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/routesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/rulesweekly0.5https://kaluga-astral.github.io/guides/docs/permissions/testingweekly0.5https://kaluga-astral.github.io/guides/weekly0.5 \ No newline at end of file