diff --git a/.eslintignore b/.eslintignore index 9b48e902..bdbe5430 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ node_modules/ /build + diff --git a/.eslintrc.cjs b/.eslintrc.cjs index e01afe0a..0ac65a93 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -17,6 +17,9 @@ module.exports = { // Tells eslint-plugin-react to automatically detect the version of React to use. version: 'detect', }, + linterOptions: { + exclude: ['src/interfaces/*'], + }, // Tells eslint how to resolve imports 'import/resolver': { node: { diff --git a/edgeware.json b/edgeware.json index f59d19b6..af284386 100644 --- a/edgeware.json +++ b/edgeware.json @@ -1 +1 @@ -{"jsonrpc":"2.0","result":"0x6d6574610e6103000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f0814496e64657801102c4163636f756e74446174610114001401146e6f6e6365100114496e646578000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000507001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400180110753132380000200c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540124000c01186e6f726d616c2401045400012c6f7065726174696f6e616c240104540001246d616e6461746f7279240104540000240c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6528010c75363400012870726f6f665f73697a6528010c7536340000280000062c002c000005060030083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d000034000002080038102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f67733c013c5665633c4469676573744974656d3e00003c000002400040102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e00060024436f6e73656e7375730800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000400105365616c0800440144436f6e73656e737573456e67696e654964000034011c5665633c75383e000500144f74686572040034011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e74557064617465640008000044000003040000000800480000024c004c08306672616d655f73797374656d2c4576656e745265636f7264080445015004540130000c011470686173651101011450686173650001146576656e7450010445000118746f70696373150101185665633c543e000050083467616d65335f72756e74696d653052756e74696d654576656e740001281853797374656d04005401706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c4772616e647061040078015470616c6c65745f6772616e6470613a3a4576656e740004002042616c616e63657304008c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e000600105375646f040098016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000700104e6674730400a8016c70616c6c65745f6e6674733a3a4576656e743c52756e74696d653e0008001047616d650400d4016c70616c6c65745f67616d653a3a4576656e743c52756e74696d653e0009003847616d6552616e646f6d6e65737304000501017c67616d655f72616e646f6d6e6573733a3a4576656e743c52756e74696d653e000a001846617563657404000901017470616c6c65745f6661756365743a3a4576656e743c52756e74696d653e000b002c50616c6c6574436163686504000d01017070616c6c65745f63616368653a3a4576656e743c52756e74696d653e000c0000540c306672616d655f73797374656d1870616c6c6574144576656e740404540001184045787472696e7369635375636365737304013464697370617463685f696e666f5801304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7264013444697370617463684572726f7200013464697370617463685f696e666f5801304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736830011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e580c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c0118776569676874240118576569676874000114636c6173735c01344469737061746368436c617373000120706179735f6665656001105061797300005c0c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000600c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000064082873705f72756e74696d653444697370617463684572726f72000134144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c65040068012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e04006c0128546f6b656e4572726f720007002841726974686d65746963040070013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007401485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c000068082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7244018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d00006c082873705f72756e74696d6528546f6b656e4572726f720001244046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008000070083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000074082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c6179657200010000780c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f7365747c0134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909097c00000280008000000408842c00840c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c69630000040088013c656432353531393a3a5075626c69630000880c1c73705f636f72651c65643235353139185075626c6963000004000401205b75383b2033325d00008c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001541c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000940c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909980c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400010c14537564696404012c7375646f5f726573756c749c01384469737061746368526573756c740000048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d284b65794368616e6765640401286f6c645f7375646f6572a401504f7074696f6e3c543a3a4163636f756e7449643e0001043901546865205c5b7375646f65725c5d206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c696564206966206f6e6520657869737465642e285375646f4173446f6e6504012c7375646f5f726573756c749c01384469737061746368526573756c740002048841207375646f206a75737420746f6f6b20706c6163652e205c5b726573756c745c5d04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909099c0418526573756c7408045401a0044501640108084f6b0400a0000000000c4572720400640000010000a00000040000a404184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000a80c2c70616c6c65745f6e6674731870616c6c6574144576656e740804540004490001981c437265617465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011c63726561746f72000130543a3a4163636f756e7449640001146f776e6572000130543a3a4163636f756e7449640000046c412060636f6c6c656374696f6e602077617320637265617465642e30466f72636543726561746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001146f776e6572000130543a3a4163636f756e74496400010484412060636f6c6c656374696f6e602077617320666f7263652d637265617465642e2444657374726f796564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400020474412060636f6c6c656374696f6e60207761732064657374726f7965642e184973737565640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400030454416e20606974656d6020776173206973737565642e2c5472616e73666572726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e74496400040468416e20606974656d6020776173207472616e736665727265642e184275726e65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400050460416e20606974656d60207761732064657374726f7965642e484974656d5472616e736665724c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400060488416e20606974656d6020626563616d65206e6f6e2d7472616e7366657261626c652e504974656d5472616e73666572556e6c6f636b6564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400070478416e20606974656d6020626563616d65207472616e7366657261626c652e504974656d50726f706572746965734c6f636b6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001346c6f636b5f6d65746164617461ac0110626f6f6c00013c6c6f636b5f61747472696275746573ac0110626f6f6c000804a8606974656d60206d65746164617461206f7220617474726962757465732077657265206c6f636b65642e40436f6c6c656374696f6e4c6f636b6564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400090474536f6d652060636f6c6c656374696f6e6020776173206c6f636b65642e304f776e65724368616e676564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001246e65775f6f776e6572000130543a3a4163636f756e744964000a0448546865206f776e6572206368616e6765642e2c5465616d4368616e676564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572a401504f7074696f6e3c543a3a4163636f756e7449643e00011461646d696ea401504f7074696f6e3c543a3a4163636f756e7449643e00011c667265657a6572a401504f7074696f6e3c543a3a4163636f756e7449643e000b0470546865206d616e6167656d656e74207465616d206368616e6765642e405472616e73666572417070726f766564140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000120646561646c696e65b001a04f7074696f6e3c3c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d6265723e000c083101416e20606974656d60206f6620612060636f6c6c656374696f6e6020686173206265656e20617070726f7665642062792074686520606f776e65726020666f72207472616e736665722062793461206064656c6567617465602e44417070726f76616c43616e63656c6c6564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e74496400012064656c6567617465000130543a3a4163636f756e744964000d081901416e20617070726f76616c20666f722061206064656c656761746560206163636f756e7420746f207472616e736665722074686520606974656d60206f6620616e206974656da860636f6c6c656374696f6e60207761732063616e63656c6c65642062792069747320606f776e6572602e54416c6c417070726f76616c7343616e63656c6c65640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001146f776e6572000130543a3a4163636f756e744964000e049c416c6c20617070726f76616c73206f6620616e206974656d20676f742063616e63656c6c65642e5c436f6c6c656374696f6e436f6e6669674368616e676564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000f040101412060636f6c6c656374696f6e6020686173206861642069747320636f6e666967206368616e676564206279207468652060466f72636560206f726967696e2e54436f6c6c656374696f6e4d65746164617461536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001004b44e6577206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e602e64436f6c6c656374696f6e4d65746164617461436c6561726564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001104b44d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e602e3c4974656d4d657461646174615365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001204984e6577206d6574616461746120686173206265656e2073657420666f7220616e206974656d2e4c4974656d4d65746164617461436c6561726564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001304984d6574616461746120686173206265656e20636c656172656420666f7220616e206974656d2e2c52656465706f7369746564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001407375636365737366756c5f6974656d73b801385665633c543a3a4974656d49643e0014042101546865206465706f73697420666f72206120736574206f6620606974656d60732077697468696e20612060636f6c6c656374696f6e6020686173206265656e20757064617465642e30417474726962757465536574140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565bc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00150405014e657720617474726962757465206d6574616461746120686173206265656e2073657420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e40417474726962757465436c6561726564100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e0016040501417474726962757465206d6574616461746120686173206265656e20636c656172656420666f7220612060636f6c6c656374696f6e60206f7220606974656d602e6c4974656d41747472696275746573417070726f76616c41646465640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001704cc41206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732061646465642e744974656d41747472696275746573417070726f76616c52656d6f7665640c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400012064656c6567617465000130543a3a4163636f756e744964001804d441206e657720617070726f76616c20746f206d6f64696679206974656d2061747472696275746573207761732072656d6f7665642e684f776e657273686970416363657074616e63654368616e67656408010c77686f000130543a3a4163636f756e7449640001406d617962655f636f6c6c656374696f6eb0015c4f7074696f6e3c543a3a436f6c6c656374696f6e49643e001904c04f776e65727368697020616363657074616e636520686173206368616e67656420666f7220616e206163636f756e742e58436f6c6c656374696f6e4d6178537570706c79536574080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d61785f737570706c7910010c753332001a04a44d617820737570706c7920686173206265656e2073657420666f72206120636f6c6c656374696f6e2e74436f6c6c656374696f6e4d696e7453657474696e677355706461746564040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964001b04ac4d696e742073657474696e677320666f72206120636f6c6c656374696f6e20686164206368616e6765642e6c4e657874436f6c6c656374696f6e4964496e6372656d656e74656404011c6e6578745f696410013c543a3a436f6c6c656374696f6e4964001c0401014576656e74206765747320656d6974746564207768656e2074686520604e657874436f6c6c656374696f6e496460206765747320696e6372656d656e7465642e304974656d5072696365536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00014477686974656c69737465645f6275796572a401504f7074696f6e3c543a3a4163636f756e7449643e001d047c546865207072696365207761732073657420666f7220746865206974656d2e404974656d507269636552656d6f766564080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964001e048c54686520707269636520666f7220746865206974656d207761732072656d6f7665642e284974656d426f75676874140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000114707269636518013c4974656d50726963653c542c20493e00011873656c6c6572000130543a3a4163636f756e7449640001146275796572000130543a3a4163636f756e744964001f044c416e206974656d2077617320626f756768742e1c54697053656e74140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011873656e646572000130543a3a4163636f756e7449640001207265636569766572000130543a3a4163636f756e744964000118616d6f756e741801584465706f73697442616c616e63654f663c542c20493e0020043c4120746970207761732073656e742e2c53776170437265617465641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656db001444f7074696f6e3c543a3a4974656d49643e0001147072696365c401ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e651001803c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d62657200210488416e20606974656d60207377617020696e74656e742077617320637265617465642e345377617043616e63656c6c65641801486f6666657265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001306f6666657265645f6974656d100124543a3a4974656d4964000148646573697265645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000130646573697265645f6974656db001444f7074696f6e3c543a3a4974656d49643e0001147072696365c401ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e651001803c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d6265720022045c5468652073776170207761732063616e63656c6c65642e2c53776170436c61696d656420013c73656e745f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400012473656e745f6974656d100124543a3a4974656d496400013c73656e745f6974656d5f6f776e6572000130543a3a4163636f756e74496400014c72656365697665645f636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400013472656365697665645f6974656d100124543a3a4974656d496400014c72656365697665645f6974656d5f6f776e6572000130543a3a4163636f756e7449640001147072696365c401ac4f7074696f6e3c507269636557697468446972656374696f6e3c4974656d50726963653c542c20493e3e3e000120646561646c696e651001803c542061732053797374656d436f6e6669673e3a3a426c6f636b4e756d62657200230468546865207377617020686173206265656e20636c61696d65642e585072655369676e6564417474726962757465735365740c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e002404fc4e657720617474726962757465732068617665206265656e2073657420666f7220616e20606974656d60206f66207468652060636f6c6c656374696f6e602e4850616c6c6574417474726962757465536574100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656db001444f7074696f6e3c543a3a4974656d49643e000124617474726962757465d0018450616c6c6574417474726962757465733c543a3a436f6c6c656374696f6e49643e00011476616c7565bc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e0025084d0141206e65772061747472696275746520696e20746865206050616c6c657460206e616d657370616365207761732073657420666f72207468652060636f6c6c656374696f6e60206f7220616e20606974656d606477697468696e20746861742060636f6c6c656374696f6e602e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909ac0000050000b004184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000b40c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000b80000021000bc0c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003401185665633c543e0000c00c2c70616c6c65745f6e667473147479706573484174747269627574654e616d65737061636504244163636f756e744964010001101850616c6c65740000003c436f6c6c656374696f6e4f776e6572000100244974656d4f776e65720002001c4163636f756e7404000001244163636f756e74496400030000c404184f7074696f6e04045401c80108104e6f6e6500000010536f6d650400c80000010000c80c2c70616c6c65745f6e66747314747970657348507269636557697468446972656374696f6e0418416d6f756e74011800080118616d6f756e74180118416d6f756e74000124646972656374696f6ecc01385072696365446972656374696f6e0000cc0c2c70616c6c65745f6e667473147479706573385072696365446972656374696f6e0001081053656e640000001c5265636569766500010000d00c2c70616c6c65745f6e6674731474797065734050616c6c6574417474726962757465730430436f6c6c656374696f6e4964011001042c55736564546f436c61696d0400100130436f6c6c656374696f6e496400000000d40c2c70616c6c65745f67616d651870616c6c6574144576656e740804540004490001802c47616d654372656174656408010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d6549640000003c47616d655365744d657461646174610c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d65496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001004c47616d654d65746164617461436c656172656408010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d65496400020044436f6c6c656374696f6e4372656174656408010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640003004c416464696e67416363657074616e63655365740c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640004003c436f6c6c656374696f6e41646465640c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640005002c4974656d4372656174656410010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001306d617962655f737570706c79b0012c4f7074696f6e3c7533323e000600244974656d416464656410010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e740007002c526571756573744d696e7410010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c4964000118746172676574000130543a3a4163636f756e744964000130626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d626572000800184d696e74656418010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c4964000118746172676574000130543a3a4163636f756e7449640001106e667473d801905665633c4e46543c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e3e000114707269636518013c42616c616e63654f663c542c20493e000118616d6f756e74100118416d6f756e74000900184275726e656410010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000a002c5472616e7366657272656414011066726f6d000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374000130543a3a4163636f756e744964000118616d6f756e74100118416d6f756e74000b00285570677261646553657414010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001206e65775f6974656d100124543a3a4974656d49640001146c6576656c1001144c6576656c000c0020557067726164656414010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001206e65775f6974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000d002050726963655365742001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000e00284974656d426f756768741001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74100118416d6f756e740001386269645f756e69745f707269636518013c42616c616e63654f663c542c20493e000f002442756e646c655365741801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400011862756e646c65e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0010003042756e646c65426f756768740c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e7449640001246269645f707269636518013c42616c616e63654f663c542c20493e00110034547261646543616e63656c65640801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e7449640012002c576973686c6973745365741801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000120776973686c697374e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e00130038576973686c69737446696c6c65640c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400012461736b5f707269636518013c42616c616e63654f663c542c20493e00140044436f6c6c656374696f6e52656d6f7665640c010c77686f000130543a3a4163636f756e74496400011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640015001c537761705365741c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e0001207265717569726564e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0016002c53776170436c61696d65640c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400013c6d617962655f6269645f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e0017002841756374696f6e5365741801147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001206475726174696f6e100138543a3a426c6f636b4e756d6265720018000c4269640c01147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e74496400010c62696418013c42616c616e63654f663c542c20493e0019003841756374696f6e436c61696d65640801147472616465100128543a3a547261646549640001246d617962655f626964ec019c4f7074696f6e3c28543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e293e001a00184275795365742001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e001b0034536574427579436c61696d65641001147472616465100128543a3a5472616465496400010c77686f000130543a3a4163636f756e744964000118616d6f756e74100118416d6f756e7400013861736b5f756e69745f707269636518013c42616c616e63654f663c542c20493e001c00444d696e696e67506f6f6c43726561746564100110706f6f6c100124543a3a506f6f6c496400010c77686f000130543a3a4163636f756e744964000124706f6f6c5f74797065f40120506f6f6c547970650001147461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e001d003c506f6f6c5365744d657461646174610c010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e001e0058506f6f6c5365744d65746164617461436c656172656408010c77686f000130543a3a4163636f756e744964000110706f6f6c100124543a3a506f6f6c4964001f0004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909d8000002dc00dc1030676166695f737570706f72741067616d651474797065730c4e46540830436f6c6c656374696f6e49640110184974656d4964011000080128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d49640000e0000002e400e41030676166695f737570706f72741067616d651474797065731c5061636b6167650830436f6c6c656374696f6e49640110184974656d49640110000c0128636f6c6c656374696f6e100130436f6c6c656374696f6e49640001106974656d1001184974656d4964000118616d6f756e74100118416d6f756e740000e804184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000ec04184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f00000010000f000000408001800f41030676166695f737570706f72741067616d6514747970657320506f6f6c547970650001081c44796e616d696300000018537461626c6500010000f8000002fc00fc1030676166695f737570706f72741067616d65147479706573104c6f6f740830436f6c6c656374696f6e49640110184974656d49640110000801246d617962655f6e6674010101844f7074696f6e3c4e46543c436f6c6c656374696f6e49642c204974656d49643e3e00011877656967687410010c7533320000010104184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc000001000005010c3c67616d655f72616e646f6d6e6573731870616c6c6574144576656e740404540001041c4e657753656564080130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0001107365656404011053656564000004b84576656e742067656e657261746564207768656e2061206e6577207072696365206973207375626d69747465642e04a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a09090909010c3470616c6c65745f6661756365741870616c6c6574144576656e740404540001042c5472616e736665727265640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018013042616c616e63654f663c543e00000004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a0909090d010c3070616c6c65745f63616368651870616c6c6574144576656e7408045400044900010004a1010a090909546865205b6576656e745d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f2920656d69747465640a090909627920746869732070616c6c65742e0a090909110108306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200001501000002300019010000021d01001d0100000408101000210108306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6e2501014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d652901016473705f72756e74696d653a3a52756e74696d65537472696e67000025010000061000290100000502002d010c306672616d655f73797374656d1870616c6c65741043616c6c0404540001201872656d61726b04011872656d61726b34011c5665633c75383e000010684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e0034232320436f6d706c6578697479202d20604f28312960387365745f686561705f706167657304011470616765732c010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646534011c5665633c75383e0002106453657420746865206e65772072756e74696d6520636f64652e0034232320436f6d706c657869747931012d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f6465605c7365745f636f64655f776974686f75745f636865636b73040110636f646534011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0034232320436f6d706c65786974798c2d20604f2843296020776865726520604360206c656e677468206f662060636f6465602c7365745f73746f726167650401146974656d73310101345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973390101205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697834010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b34011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3101000002350100350100000408343400390100000234003d010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2401185765696768740001246d61785f626c6f636b2401185765696768740001247065725f636c617373410101845065724469737061746368436c6173733c57656967687473506572436c6173733e000041010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454014501000c01186e6f726d616c450101045400012c6f7065726174696f6e616c45010104540001246d616e6461746f72794501010454000045010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632401185765696768740001346d61785f65787472696e736963490101384f7074696f6e3c5765696768743e0001246d61785f746f74616c490101384f7074696f6e3c5765696768743e0001207265736572766564490101384f7074696f6e3c5765696768743e0000490104184f7074696f6e04045401240108104e6f6e6500000010536f6d6504002400000100004d010c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d6178510101545065724469737061746368436c6173733c7533323e000051010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400005501082873705f776569676874733c52756e74696d6544625765696768740000080110726561642c010c75363400011477726974652c010c75363400005901082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d652901013452756e74696d65537472696e67000124696d706c5f6e616d652901013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069735d01011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800005d01040c436f77040454016101000400610100000061010000026501006501000004086901100069010000030800000008006d01000005040071010c306672616d655f73797374656d1870616c6c6574144572726f720404540001183c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e046c4572726f7220666f72207468652053797374656d2070616c6c657475010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540130045300000400150101185665633c543e000079010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77280124543a3a4d6f6d656e7400003c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627940604d696e696d756d506572696f64602e00d4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602961012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e7d01083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e000300008101083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f7269746965738501016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564b001244f7074696f6e3c4e3e000085010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401800453000004007c01185665633c543e000089010c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f668d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f66b9010140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f668d0101bc426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20543a3a426c6f636b4e756d6265723e3e00013c6b65795f6f776e65725f70726f6f66b9010140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100138543a3a426c6f636b4e756d62657200016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100138543a3a426c6f636b4e756d6265720002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e8d01085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480130044e0110000801187365745f69642c0114536574496400013065717569766f636174696f6e9101014845717569766f636174696f6e3c482c204e3e00009101085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480130044e011001081c507265766f7465040095010139016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265766f74653c482c204e3e2c0a417574686f726974795369676e61747572653e00000024507265636f6d6d69740400ad010141016772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c206772616e6470613a3a507265636f6d6d69743c482c204e3e2c0a417574686f726974795369676e61747572653e000100009501084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c084964018404560199010453019d0100100130726f756e645f6e756d6265722c010c7536340001206964656e7469747984010849640001146669727374a901011828562c2053290001187365636f6e64a901011828562c20532900009901084066696e616c6974795f6772616e6470611c507265766f74650804480130044e01100008012c7461726765745f68617368300104480001347461726765745f6e756d6265721001044e00009d010c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400a1010148656432353531393a3a5369676e61747572650000a1010c1c73705f636f72651c65643235353139245369676e617475726500000400a50101205b75383b2036345d0000a501000003400000000800a9010000040899019d0100ad01084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c0849640184045601b1010453019d0100100130726f756e645f6e756d6265722c010c7536340001206964656e7469747984010849640001146669727374b501011828562c2053290001187365636f6e64b501011828562c2053290000b101084066696e616c6974795f6772616e64706124507265636f6d6d69740804480130044e01100008012c7461726765745f68617368300104480001347461726765745f6e756d6265721001044e0000b50100000408b1019d0100b901081c73705f636f726510566f696400010000bd010c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909c1010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401c501045300000400cd0101185665633c543e0000c5010c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964690101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e73c901011c526561736f6e730000c9010c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c00020000cd01000002c50100d1010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d501045300000400d90101185665633c543e0000d5010c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720169011c42616c616e6365011800080108696469010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e63650000d901000002d50100dd010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e101045300000400e50101185665633c543e0000e1010c3c70616c6c65745f62616c616e636573147479706573204964416d6f756e740808496401a01c42616c616e63650118000801086964a001084964000118616d6f756e7418011c42616c616e63650000e501000002e10100e9010c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e587365745f62616c616e63655f646570726563617465640c010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565f9010128543a3a42616c616e63650001306f6c645f7265736572766564f9010128543a3a42616c616e636500011855015365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e743b20697420616c736f2074616b657320612072657365727665642062616c616e6365206275742074686973ec6d757374206265207468652073616d6520617320746865206163636f756e7427732063757272656e742072657365727665642062616c616e63652e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e0009015741524e494e473a20546869732063616c6c206973204445505245434154454421205573652060666f7263655f7365745f62616c616e63656020696e73746561642e38666f7263655f7472616e736665720c0118736f75726365ed0101504163636f756e7449644c6f6f6b75704f663c543e00011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665ac0110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686ffd0101445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f72207468655c706f73736962696c696c7479206f6620636875726e292e207472616e7366657208011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565f9010128543a3a42616c616e636500070c3101416c69617320666f7220607472616e736665725f616c6c6f775f6465617468602c2070726f7669646564206f6e6c7920666f72206e616d652d7769736520636f6d7061746962696c6974792e0001015741524e494e473a2044455052454341544544212057696c6c2062652072656c656173656420696e20617070726f78696d6174656c792033206d6f6e7468732e44666f7263655f7365745f62616c616e636508010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565f9010128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632eed010c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801a0011408496404000001244163636f756e74496400000014496e6465780400f10101304163636f756e74496e6465780001000c526177040034011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400f50101205b75383b2032305d00040000f101000006a000f501000003140000000800f9010000061800fd01000002000001020c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001283856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804884e756d626572206f6620686f6c64732065786365656420604d6178486f6c6473602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090905020c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004001801107531323800000902086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e74000000085632000100000d020c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000110107375646f04011063616c6c1102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000018350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e547375646f5f756e636865636b65645f77656967687408011063616c6c1102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000118776569676874240118576569676874000120350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7365745f6b657904010c6e6577ed0101504163636f756e7449644c6f6f6b75704f663c543e00021c5d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e1c7375646f5f617308010c77686fed0101504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c1102017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00031c4d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0034232320436f6d706c65786974791c2d204f2831292e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e1102083467616d65335f72756e74696d652c52756e74696d6543616c6c0001201853797374656d04002d0101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400790101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c4772616e6470610400890101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0004002042616c616e6365730400e90101b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e000500105375646f04000d0201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e0007001047616d650400150201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c47616d652c2052756e74696d653e0009003847616d6552616e646f6d6e6573730400350201cd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c47616d6552616e646f6d6e6573732c2052756e74696d653e000a00184661756365740400390201ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4661756365742c2052756e74696d653e000b000015020c2c70616c6c65745f67616d651870616c6c65741043616c6c0804540004490001c02c6372656174655f67616d6504011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e00002c484372656174652061206e65772067616d652e00584f726967696e206d757374206265205369676e65642e002901496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e6572206172652072657365727665643a206047616d654465706f736974602e00842d206061646d696e603a207468652061646d696e206f66207468652067616d652e0050456d697473206047616d6543726561746564602e00385765696768743a20604f28312960586372656174655f67616d655f636f6c6c656374696f6e04011067616d65100124543a3a47616d65496400012c80437265617465206120636f6c6c656374696f6e20696e207468652067616d652e0021014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e2074686520746865206067616d65602e004101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e6572206172652072657365727665643a2060436f6c6c656374696f6e4465706f736974602e00582d206067616d65603a207468652067616d652069642e0068456d6974732060436f6c6c656374696f6e43726561746564602e00385765696768743a20604f28312960446372656174655f636f6c6c656374696f6e04011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e00023c604372656174652061206e657720636f6c6c656374696f6e2e001d0154686973206e657720636f6c6c656374696f6e20686173206e6f206974656d7320696e697469616c6c7920616e6420697473206f776e657220697320746865206f726967696e2e002501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420686176652073756666696369656e742066756e647320667265652e00c460436f6c6c656374696f6e4465706f736974602066756e6473206f662073656e646572206172652072657365727665642e002c506172616d65746572733a45012d206061646d696e603a205468652061646d696e206f66207468697320636f6c6c656374696f6e2e205468652061646d696e2069732074686520696e697469616c2061646472657373206f662065616368986d656d626572206f662074686520636f6c6c656374696f6e27732061646d696e207465616d2e0068456d6974732060436f6c6c656374696f6e43726561746564602e00385765696768743a20604f28312960447365745f6163636570745f616464696e6708011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000320d453657420616363657074616e6365206f66206f776e65727368697020666f72206120706172746963756c6172206163636f756e742e002d014f726967696e206d75737420626520605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662060636f6c6c656374696f6e602e00482d206067616d65603a2047616d652049442e782d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e2049442e0070456d6974732060416464696e67416363657074616e6365536574602e4c6164645f67616d655f636f6c6c656374696f6e08011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400042c74416464206120636f6c6c656374696f6e20746f207468652067616d652e002d01546865206f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f6620746865206067616d65602e002c506172616d65746572733a482d206067616d65603a2047616d652049442e782d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e2049442e0060456d6974732060436f6c6c656374696f6e4164646564602e00385765696768743a20604f283129602c6372656174655f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001306d617962655f737570706c79b0012c4f7074696f6e3c7533323e000530f443726561746520616e206365727461696e20616d6f756e74206f66206974656d20666f72206120706172746963756c617220636f6c6c656374696f6e2e003501546865206f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f662060636f6c6c656374696f6e602e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206d696e7465642ea02d20606974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2e602d2060636f6e666967603a204974656d20436f6e6669672e09012d20606d617962655f737570706c79603a204974656d20737570706c792c204e6f6e6520696e646963617465732074686520696e66696e69746520737570706c792e00a8456d69747320604974656d4372656174656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960286164645f737570706c790c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e740006340039014f726967696e206d757374206265207369676e656420616e642068617665207065726d697373696f6e2e204974656d277320737570706c79206d757374206e6f7420626520696e66696e6974652e00302320506172616d657465727300b42d20606f726967696e603a205369676e6564206f726967696e206f6620746865207472616e73616374696f6e2eb42d2060636f6c6c656374696f6e603a204964656e746966696572206f662074686520636f6c6c656374696f6e2e842d20606974656d603a204964656e746966696572206f6620746865206974656d2edc2d2060616d6f756e74603a20416d6f756e7420746f2061646420746f2062616c616e636520616e642066696e69746520737570706c792e00a0456d69747320604974656d416464656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f28312960106275726e0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000830504275726e20616d6f756e74206f66206974656d2e005d01546865206f726967696e206d75737420636f6e666f726d20746f2060466f7263654f726967696e60206f72206d757374206265205369676e656420616e6420746865207369676e696e67206163636f756e74206d757374ec626520746865206f776e6572206f662074686520606974656d6020616e64206861732073756666696369656e74206974656d2062616c616e63652e00e02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206275726e65642e802d20606974656d603a20546865206974656d20746f206265206275726e65642eb02d2060616d6f756e74603a2054686520616d6f756e74206f66206974656d20746f206265206275726e65642e003c456d69747320604275726e6564602e00385765696768743a20604f28312960207472616e73666572100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064657374ed0101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74100118416d6f756e7400093835015472616e736665727320612073706563696669656420616d6f756e74206f6620616e206974656d206265747765656e206163636f756e74732077697468696e206120636f6c6c656374696f6e2e00302320506172616d657465727300e42d20606f726967696e603a204f726967696e206d757374206265207369676e65642c20696e6469636174696e67207468652073656e6465722e982d2060636f6c6c656374696f6e603a20436f6c6c656374696f6e206964656e7469666965722e682d20606974656d603a204974656d206964656e7469666965722e942d206064657374603a2044657374696e6174696f6e206163636f756e74206c6f6f6b75702eac2d2060616d6f756e74603a20416d6f756e74206f6620746865206974656d20746f207472616e736665722e000050456d69747320605472616e73666572726564602e00385765696768743a20604f28312960407365745f757067726164655f6974656d1c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001206e65775f6974656d100124543a3a4974656d4964000118636f6e666967190201284974656d436f6e66696700011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0001146c6576656c1001144c6576656c00010c66656518013c42616c616e63654f663c542c20493e000a406853657420757067726164652072756c6520666f72206974656d2e0015014f726967696e206d757374206265205369676e656420616e64207369676e65722073686f756c64206265207468652041646d696e206f662060636f6c6c656374696f6e602e0028417267756d656e74733a09012d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f20626520757067726164652d72756c65207365742ea82d20606974656d603a20546865206974656d20746f20626520757067726164652d72756c65207365742eb02d20606e65775f6974656d603a20416e206964656e746966696572206f6620746865206e6577206974656d2e982d2060636f6e666967603a204974656d20636f6e666967206f6620606e65775f6974656d602e782d206064617461603a20606e65775f6974656d60206d657461646174612e642d20606c6576656c603a2055706772616465206c6576656c2e542d2060666565603a2055706772616465206665652e004c456d697473206055706772616465536574602e00385765696768743a20604f2831296030757067726164655f6974656d0c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d4964000118616d6f756e74100118416d6f756e74000b388055706772616465206365727461696e206e756d626572206f66206974656d732e005101546865206f726967696e206d757374206265207369676e656420616e6420746865207369676e6572206d757374206861766520612073756666696369656e742060616d6f756e7460206f6620606974656d73602e00d45369676e6572206d75737420706179206066656560202a2060616d6f756e746020746f207570677261646520746865206974656d2e0028417267756d656e74733ae82d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f2062652075706772616465642e882d20606974656d603a20546865206974656d20746f2062652075706772616465642ec02d2060616d6f756e74603a2054686520616d6f756e74206f6620606974656d6020746f2062652075706772616465642e0044456d69747320605570677261646564602e00385765696768743a20604f28312960247365745f707269636510011c7061636b616765e4018c5061636b6167653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000d34ac5365742074686520707269636520666f72204e4654732077697468696e206120636f6c6c656374696f6e2e00e84f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520606974656d602e0019012d20607061636b616765603a2061206e756d626572206f6620616e206974656d20696e206120636f6c6c656374696f6e20746f207365742074686520707269636520666f722ea02d2060756e69745f7072696365603a2054686520707269636520666f722065616368206974656d2e4d012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573207468652063757272656e74202020626c6f636b2e2d012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573206e6f20656e642e0044456d69747320605072696365536574602e00385765696768743a20604f28312960206275795f6974656d0c01147472616465100128543a3a54726164654964000118616d6f756e74100118416d6f756e740001246269645f707269636518013c42616c616e63654f663c542c20493e000e30b4427579206365727461696e206e756d626572206f66206974656d732066726f6d20607365745f7072696365602e00584f726967696e206d757374206265205369676e65642e00882d20607472616465603a20546865207365745f70726963652074726164652069642e8c2d2060616d6f756e74603a204e756d626572206f66206974656d7320746f206275792e35012d20606269645f7072696365603a2042696420666f722065616368206974656d2c20606269645f707269636560206d75737420626520657175616c20746f206f7220686967686572207468616e3c20206070726963655f756e6974602e004c456d69747320604974656d426f75676874602e00385765696768743a20604f28312960346164645f7365745f70726963650801147472616465100128543a3a54726164654964000118737570706c79e4018c5061636b6167653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000f20bc416464206d6f7265206974656d7320746f207365742074686520707269636520696e20607365745f7072696365602e00ec4f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f662074686520607472616465602e00882d20607472616465603a20546865207365745f70726963652074726164652069642eb02d2060737570706c79603a20546865206e756d626572206f66206974656d7320746f2062652061646465642e00385765696768743a20604f28312960247365745f6f7264657210011c7061636b616765e4018c5061636b6167653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000128756e69745f707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e001d3880536574207570206120707572636861736520666f7220607061636b616765602e00e8497420697320706f737369626c6520746f20747261646520666f72206120736d616c6c2070617274206f662074686520607061636b616765602e00584f726967696e206d757374206265205369676e65642e00f42d20607061636b616765603a2041206e756d626572206f6620616e206974656d20696e206120636f6c6c656374696f6e2077616e7420746f206275792e11012d2060756e69745f7072696365603a20546865207072696365206f662065616368206974656d207468652073656e6465722069732077696c6c696e6720746f207061792eb02d206073746172745f626c6f636b603a2054686520626c6f636b20746f20737461727420736574206275792ea02d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e6420736574206275792e003c456d6974732060427579536574602e00385765696768743a20604f283129602473656c6c5f6974656d0c01147472616465100128543a3a54726164654964000118616d6f756e74100118416d6f756e7400012461736b5f707269636518013c42616c616e63654f663c542c20493e001e2cc053656c6c20e2808be2808b60616d6f756e7460206f6620746865206974656d20666f7220607365745f6f72646572602e00584f726967696e206d757374206265205369676e65642e00882d20607472616465603a20546865207365745f6f726465722074726164652069642ea02d2060616d6f756e74603a2054686520616d6f756e74206f66206974656d7320746f2073656c6c2eec2d206061736b5f7072696365603a205468652070726963652074686174207468652073656e6465722077696c6c696e6720746f206163636570742e003c456d6974732060427579536574602e00385765696768743a20604f28312960287365745f62756e646c6510011862756e646c65e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0010347c5365742074686520707269636520666f7220746865206062756e646c65602e00f04f726967696e206d757374206265205369676e656420616e64206d75737420626520746865206f776e6572206f6620746865206062756e646c65602e0041012d206062756e646c65603a20412067726f7570206f66206974656d73206d61792062652066726f6d20646966666572656e7420636f6c6c656374696f6e7320746f2073657420707269636520666f722e882d20607072696365603a2054686520707269636520746865206062756e646c65602e4d012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573207468652063757272656e74202020626c6f636b2e2d012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657474696e67207468652070726963652c20604e6f6e656020696e64696361746573206e6f20656e642e0048456d697473206042756e646c65536574602e00385765696768743a20604f28312960286275795f62756e646c650801147472616465100128543a3a547261646549640001246269645f707269636518013c42616c616e63654f663c542c20493e0011287c42757920612062756e646c652066726f6d20607365745f62756e646c65602e00584f726967696e206d757374206265205369676e65642e007c2d20607472616465603a207365745f62756e646c652074726164652069642ed82d20606269645f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e0048456d697473206042756e646c65536574602e00385765696768743a20604f283129603063616e63656c5f74726164650801147472616465100128543a3a5472616465496400012874726164655f7479706525020124547261646554797065001228b443616e63656c206120747261646520696e206074726164655f747970656020627920696420607472616465602e00e44f726967696e206d757374206265205369676e656420616e64207369676e6572206d75737420626520746865207472616465206f776e65722e00502d20607472616465603a2054726164652069642e6c2d206074726164655f74797065603a20547261646520747970652e0058456d6974732060547261646543616e63656c6564602e00385765696768743a20604f28312960306f726465725f62756e646c6510011862756e646c65e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e000114707269636518013c42616c616e63654f663c542c20493e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0013307c536574207570206120707572636861736520666f72206062756e646c65602e00584f726967696e206d757374206265205369676e65642e0031012d206062756e646c65603a2020412067726f7570206f66206974656d73206d61792062652066726f6d20646966666572656e7420636f6c6c656374696f6e732077616e7420746f206275792ec82d20607072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f207061792e55012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657420776973686c6973742c20604e6f6e656020696e64696361746573207468652063757272656e7420626c6f636b2e19012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657420776973686c6973742c20604e6f6e656020696e64696361746573206e6f20656e642e0050456d6974732060576973686c697374536574602e00385765696768743a20604f283129602c73656c6c5f62756e646c650801147472616465100128543a3a5472616465496400012461736b5f707269636518013c42616c616e63654f663c542c20493e0014288c53656c6c207468652062756e646c6520666f7220606f726465725f62756e646c65602e00584f726967696e206d757374206265205369676e65642e00982d20607472616465603a2020546865206f726465725f62756e646c652074726164652069642ee42d206061736b5f7072696365603a20546865207072696365207468652073656e6465722069732077696c6c696e6720746f206163636570742e005c456d6974732060576973686c69737446696c6c6564602e00385765696768743a20604f283129604472656d6f76655f636f6c6c656374696f6e08011067616d65100124543a3a47616d654964000128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640015288052656d6f7665206120636f6c6c656374696f6e20696e207468652067616d652e003d014f726967696e206d757374206265205369676e656420616e64207369676e65722073686f756c64206265207468652041646d696e206f66207468652067616d65206f7220636f6c6c656374696f6e2e005c2d206067616d65603a20205468652067616d652069642e842d206061736b5f7072696365603a2054686520636f6c6c656374696f6e2069642e0068456d6974732060436f6c6c656374696f6e52656d6f766564602e00385765696768743a20604f28312960486c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400162cec446973616c6c6f77206675727468657220756e70726976696c65676564207472616e73666572206f72207472616465206f6620616e206974656d2ed453696d706c792072652d63616c6c20606c6f636b5f6974656d5f7472616e7366657260206f66206070616c6c65742d6e667473602e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642eb82d20606974656d603a20546865206974656d20746f206265636f6d65206e6f6e2d7472616e7366657261626c652e006c456d69747320604974656d5472616e736665724c6f636b6564602e00385765696768743a20604f2831296050756e6c6f636b5f6974656d5f7472616e73666572080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400172ca852652d616c6c6f7720756e70726976696c65676564207472616e73666572206f6620616e206974656d2edc53696d706c792072652d63616c6c2060756e6c6f636b5f6974656d5f7472616e7366657260206f66206070616c6c65742d6e667473602e003d014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c642062652074686520467265657a6572206f66207468652060636f6c6c656374696f6e602e00e42d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e206f6620746865206974656d20746f206265206368616e6765642ea82d20606974656d603a20546865206974656d20746f206265636f6d65207472616e7366657261626c652e0074456d69747320604974656d5472616e73666572556e6c6f636b6564602e00385765696768743a20604f283129602c6372656174655f73776170140118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e0001207265717569726564e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e000124656e645f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e001834b85365742061207377617020746f2065786368616e67652060736f757263656020746f20607265717569726564602e000d014f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420626520746865206f776e6572206f662060736f75726365602e00582d2060736f75726365603a2042756e646c6520696e2e642d20607265717569726564603a2042756e646c65206f75742efc2d20606d617962655f7072696365603a204d617962652074686520707269636520746861742073656e6465722077696c6c696e6720746f206163636570742e45012d206073746172745f626c6f636b603a2054686520626c6f636b20746f2073746172742073657420737761702c20604e6f6e656020696e64696361746573207468652063757272656e7420626c6f636b2e09012d2060656e645f626c6f636b603a2054686520626c6f636b20746f20656e642073657420737761702c20604e6f6e656020696e64696361746573206e6f20656e642e0040456d697473206053776170536574602e00385765696768743a20604f28312960246d616b655f737761700801147472616465100128543a3a5472616465496400013c6d617962655f6269645f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e0019288c4d616b6520616e2065786368616e676520666f7220606372656174655f73776170602e00584f726967696e206d757374206265205369676e65642e00902d20607472616465603a20546865206372656174655f737761702074726164652069642ee42d20606d617962655f6269645f7072696365603a204d6179626520612070726963652073656e6465722077696c6c696e6720746f207061792e0050456d697473206053776170436c61696d6564602e00385765696768743a20604f283129602c7365745f61756374696f6e100118736f75726365e0018842756e646c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00012c6d617962655f7072696365e8015c4f7074696f6e3c42616c616e63654f663c542c20493e3e00012c73746172745f626c6f636bb001584f7074696f6e3c543a3a426c6f636b4e756d6265723e0001206475726174696f6e100138543a3a426c6f636b4e756d626572001a347843726561746520612061756374696f6e20666f722060736f75726365602e000d014f726967696e206d757374206265205369676e656420616e64207369676e6572206d75737420626520746865206f776e6572206f66207468652060736f75726365602e94546865206c617374206269646465722077696c6c2077696e207468652061756374696f6e2e008c2d2060736f75726365603a205468652062756e646c6520666f722061756374696f6e2e942d20606d617962655f7072696365603a204d617962652061206d696e696d756d206269642e51012d206073746172745f626c6f636b603a2054686520626c6f636b20746f207374617274207468652061756374696f6e2c20604e6f6e656020696e64696361746573207468652063757272656e7420626c6f636b2e2d012d20606475726174696f6e603a20546865206475726174696f6e206f66207468652061756374696f6e206d6561737572656420627920746865206e756d626572206f6620626c6f636b732e004c456d697473206041756374696f6e536574602e00385765696768743a20604f283129602c6269645f61756374696f6e0801147472616465100128543a3a5472616465496400010c62696418013c42616c616e63654f663c542c20493e001b2c6c4d616b6520612062696420666f72207468652061756374696f6e2e00584f726967696e206d757374206265205369676e65642e00682d20607472616465603a205468652061756374696f6e2069642e61012d2060626964603a20546865206269642c206062696460206d75737420626520686967686572207468616e20746865206d696e696d756d2062696420616e6420686967686572207468616e207468652070726576696f75731820206269642e0030456d6974732060426964602e00385765696768743a20604f2831296034636c6f73655f61756374696f6e0401147472616465100128543a3a54726164654964001c309048616e646c696e6720616e2061756374696f6e2061667465722069742773206f7665722e0094546865206c617374206269646465722077696c6c2077696e207468652061756374696f6e2ef04966207468657265206973206e6f206269642c20746865204e465420696e207468652061756374696f6e2077696c6c20626520726566756e6465642e00584f726967696e206d757374206265205369676e65642e00682d20607472616465603a205468652061756374696f6e2069642e005c456d697473206041756374696f6e436c61696d6564602e00385765696768743a20604f28312960347365745f617474726962757465140128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e00011476616c7565bc0174426f756e6465645665633c75382c20543a3a56616c75654c696d69743e001f60a853657420616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00c053696d706c792072652d63616c6c20607365745f61747472696275746560206f66206070616c6c65742d6e667473602e0001014f726967696e206d757374206265205369676e656420616e64206d75737420636f6e666f726d20746f20746865206e616d6573706163652072756c657365743a3d012d2060436f6c6c656374696f6e4f776e657260206e616d65737061636520636f756c64206265206d6f646966696564206279207468652060636f6c6c656374696f6e602041646d696e206f6e6c793b59012d20604974656d4f776e657260206e616d65737061636520636f756c64206265206d6f6469666965642062792074686520606d617962655f6974656d60206f776e6572206f6e6c792e20606d617962655f6974656d6074202073686f756c642062652073657420696e207468617420636173653b55012d20604163636f756e74284163636f756e7449642960206e616d65737061636520636f756c64206265206d6f646966696564206f6e6c79207768656e2074686520606f726967696e602077617320676976656e20615820207065726d697373696f6e20746f20646f20736f3b00f05468652066756e6473206f6620606f726967696e6020617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613a2d01604174747269627574654465706f73697442617365202b204465706f73697450657242797465202a20286b65792e6c656e202b2076616c75652e6c656e29602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742e05012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652ecc2d206076616c7565603a205468652076616c756520746f20776869636820746f2073657420746865206174747269627574652e0054456d6974732060417474726962757465536574602e00385765696768743a20604f283129603c636c6561725f617474726962757465100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001286d617962655f6974656db001444f7074696f6e3c543a3a4974656d49643e0001246e616d657370616365c001804174747269627574654e616d6573706163653c543a3a4163636f756e7449643e00010c6b6579bc016c426f756e6465645665633c75382c20543a3a4b65794c696d69743e002044b0436c65617220616e2061747472696275746520666f72206120636f6c6c656374696f6e206f72206974656d2e00c853696d706c792072652d63616c6c2060636c6561725f61747472696275746560206f66206070616c6c65742d6e667473602e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f6620746865286174747269627574652e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722e0d012d20606d617962655f6974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e942d20606e616d657370616365603a204174747269627574652773206e616d6573706163652e882d20606b6579603a20546865206b6579206f6620746865206174747269627574652e0064456d6974732060417474726962757465436c6561726564602e00385765696768743a20604f28312960307365745f6d657461646174610c0128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00214c7453657420746865206d6574616461746120666f7220616e206974656d2e00bc53696d706c792072652d63616c6c20607365745f6d6574616461746160206f66206070616c6c65742d6e667473602e00005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e005101496620746865206f726967696e206973205369676e65642c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0039012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f207365742eec2d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207365742e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0060456d69747320604974656d4d65746164617461536574602e00385765696768743a20604f2831296038636c6561725f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d496400223c7c436c65617220746865206d6574616461746120666f7220616e206974656d2e00c453696d706c792072652d63616c6c2060636c6561725f6d6574616461746160206f66206070616c6c65742d6e667473602e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66207468653460636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0041012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206974656d2773206d6574616461746120746f20636c6561722ef42d20606974656d603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f20636c6561722e0070456d69747320604974656d4d65746164617461436c6561726564602e00385765696768743a20604f283129605c7365745f636f6c6c656374696f6e5f6d65746164617461080128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e0023448853657420746865206d6574616461746120666f72206120636f6c6c656374696f6e2e00e853696d706c792072652d63616c6c20607365745f636f6c6c656374696f6e5f6d6574616461746160206f66206070616c6c65742d6e667473602e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e005901496620746865206f726967696e20697320605369676e6564602c207468656e2066756e6473206f66207369676e657220617265207265736572766564206163636f7264696e6720746f2074686520666f726d756c613af4604d657461646174614465706f73697442617365202b204465706f73697450657242797465202a20646174612e6c656e602074616b696e6720696e746f8c6163636f756e7420616e7920616c72656164792072657365727665642066756e64732e0011012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f6620746865206974656d2077686f7365206d6574616461746120746f207570646174652e4d012d206064617461603a205468652067656e6572616c20696e666f726d6174696f6e206f662074686973206974656d2e204c696d6974656420696e206c656e6774682062792060537472696e674c696d6974602e0078456d6974732060436f6c6c656374696f6e4d65746164617461536574602e00385765696768743a20604f2831296064636c6561725f636f6c6c656374696f6e5f6d65746164617461040128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e496400243890436c65617220746865206d6574616461746120666f72206120636f6c6c656374696f6e2e00f053696d706c792072652d63616c6c2060636c6561725f636f6c6c656374696f6e5f6d6574616461746160206f66206070616c6c65742d6e667473602e0055014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f7220605369676e65646020616e64207468652073656e6465722073686f756c64206265207468652041646d696e206f66447468652060636f6c6c656374696f6e602e00c0416e79206465706f73697420697320667265656420666f722074686520636f6c6c656374696f6e2773206f776e65722e0025012d2060636f6c6c656374696f6e603a20546865206964656e746966696572206f662074686520636f6c6c656374696f6e2077686f7365206d6574616461746120746f20636c6561722e0088456d6974732060436f6c6c656374696f6e4d65746164617461436c6561726564602e00385765696768743a20604f28312960207365745f7465616d100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e4964000118697373756572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011461646d696e290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e002548d44368616e676520746865204973737565722c2041646d696e20616e6420467265657a6572206f66206120636f6c6c656374696f6e2e00ac53696d706c792072652d63616c6c20607365745f7465616d60206f66206070616c6c65742d6e667473602e005d014f726967696e206d757374206265206569746865722060466f7263654f726967696e60206f72205369676e656420616e64207468652073656e6465722073686f756c6420626520746865204f776e6572206f66207468653460636f6c6c656374696f6e602e0051014e6f74653a2062792073657474696e672074686520726f6c6520746f20604e6f6e6560206f6e6c79207468652060466f7263654f726967696e602077696c6c2062652061626c6520746f206368616e676520697464616674657220746f2060536f6d65286163636f756e7429602e00f02d2060636f6c6c656374696f6e603a2054686520636f6c6c656374696f6e2077686f7365207465616d2073686f756c64206265206368616e6765642eb82d2060697373756572603a20546865206e657720497373756572206f66207468697320636f6c6c656374696f6e2eb02d206061646d696e603a20546865206e65772041646d696e206f66207468697320636f6c6c656374696f6e2ec02d2060667265657a6572603a20546865206e657720467265657a6572206f66207468697320636f6c6c656374696f6e2e0050456d69747320605465616d4368616e676564602e00385765696768743a20604f283129604c6372656174655f64796e616d69635f706f6f6c0c01286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e0026347843726561746520612064796e616d6963206d696e74696e6720706f6f6c2e0059014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420686176652073756666696369656e74206974656d7320696e2074686520606c6f6f745f7461626c65602e0009014e6f74653a20546865206d696e74696e67206368616e63652077696c6c206265206368616e6765642061667465722065616368204e4654206973206d696e7465642e00b42d20606c6f6f745f7461626c65603a20412062756e646c65206f66204e46547320666f72206d696e74696e672ea82d206061646d696e603a205468652041646d696e206f662074686973206d696e74696e6720706f6f6c2eb42d20606d696e745f73657474696e6773603a20546865206d696e74696e6720706f6f6c2073657474696e67732e0068456d69747320604d696e696e67506f6f6c43726561746564602e00385765696768743a20604f28312960486372656174655f737461626c655f706f6f6c0c01286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e00273874437265617465206120737461626c65206d696e74696e6720706f6f6c2e0049014f726967696e206d757374206265205369676e656420616e64207468652073656e6465722073686f756c6420626520746865206f776e6572206f6620616c6c20636f6c6c656374696f6e7320696e207468650501606c6f6f745f7461626c65602e20436f6c6c656374696f6e20696e20606c6f6f745f7461626c6560206d75737420626520696e66696e69746520737570706c792e0019014e6f74653a20546865206d696e74696e67206368616e63652077696c6c206e6f74206265206368616e6765642061667465722065616368204e4654206973206d696e7465642e00b42d20606c6f6f745f7461626c65603a20412062756e646c65206f66204e46547320666f72206d696e74696e672ea82d206061646d696e603a205468652041646d696e206f662074686973206d696e74696e6720706f6f6c2eb42d20606d696e745f73657474696e6773603a20546865206d696e74696e6720706f6f6c2073657474696e67732e0068456d69747320604d696e696e67506f6f6c43726561746564602e00385765696768743a20604f2831296030726571756573745f6d696e740c0110706f6f6c100124543a3a506f6f6c496400011c6d696e745f746fed0101504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74100118416d6f756e7400282cd04d696e7420616e20616d6f756e74206f66206974656d206f6e206120706172746963756c6172206d696e74696e6720706f6f6c2e005101546865206f726967696e206d757374206265205369676e656420616e64207468652073656e646572206d75737420636f6d706c7920776974682074686520606d696e745f73657474696e6773602072756c65732e00802d2060706f6f6c603a2054686520706f6f6c20746f206265206d696e7465642ee02d20606d696e745f746f603a204163636f756e7420696e746f20776869636820746865206974656d2077696c6c206265206d696e7465642e942d2060616d6f756e74603a2054686520616d6f756e74206d6179206265206d696e7465642e0094456d69747320604d696e74656460206576656e74207768656e207375636365737366756c2e00385765696768743a20604f283129606c6372656174655f636f6c6c656374696f6e5f776974685f6461746114011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00011461646d696e290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e000118697373756572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011c667265657a6572290201704f7074696f6e3c4163636f756e7449644c6f6f6b75704f663c543e3e00011067616d65b001444f7074696f6e3c543a3a47616d6549643e00292c5101437265617465732061206e657720636f6c6c656374696f6e2077697468207468652070726f7669646564206461746120616e6420736574732074686520636f6c6c656374696f6e206d6574616461746120616e64147465616d2e00b42d20606f726967696e603a20546865206163636f756e74206f726967696e206f66207468652063616c6c65722e902d206061646d696e603a205468652061646d696e206163636f756e74206c6f6f6b75702e882d206064617461603a2054686520636f6c6c656374696f6e206d657461646174612edc2d2060697373756572603a20546865206f7074696f6e616c206163636f756e74206c6f6f6b757020666f7220746865206973737565722ee42d2060667265657a6572603a20546865206f7074696f6e616c206163636f756e74206c6f6f6b757020666f722074686520667265657a65722e003d0152657475726e7320604f6b28282929602069662074686520636f6c6c656374696f6e206973206372656174656420616e6420746865206d6574616461746120616e64207465616d2061726520736574347375636365737366756c6c792e546372656174655f6974656d5f776974685f64617461100128636f6c6c656374696f6e10013c543a3a436f6c6c656374696f6e49640001106974656d100124543a3a4974656d49640001306d617962655f737570706c79b0012c4f7074696f6e3c7533323e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002a241501437265617465732061206e6577206974656d2077697468207468652070726f7669646564206461746120616e64207365747320746865206974656d206d657461646174612e00ac2d206f726967696e3a20546865206163636f756e74206f726967696e206f66207468652063616c6c65722ee42d20636f6c6c656374696f6e3a2054686520636f6c6c656374696f6e204944206f6620746865206974656d277320636f6c6c656374696f6e2e882d206974656d3a2054686520756e69717565204944206f6620746865206974656d2ec02d206d617962655f737570706c793a20546865206f7074696f6e616c20737570706c79206f6620746865206974656d2e682d20646174613a20546865206974656d206d657461646174612e002d0152657475726e73204f6b2828292920696620746865206974656d206973206372656174656420616e6420746865206d6574616461746120697320736574207375636365737366756c6c792e546372656174655f67616d655f776974685f6461746108011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002b205101546869732066756e6374696f6e20637265617465732061206e65772067616d652077697468207468652070726f7669646564206d657461646174612e20497420726571756972657320746865206163636f756e7451016f726967696e206f66207468652063616c6c65722c20746865206c6f6f6b7570206f66207468652061646d696e206163636f756e742c20616e6420746865206d65746164617461206f66207468652067616d652e00ac2d206f726967696e3a20546865206163636f756e74206f726967696e206f66207468652063616c6c65722ea42d2061646d696e3a20546865206c6f6f6b7570206f66207468652061646d696e206163636f756e742e842d20646174613a20546865206d65746164617461206f66207468652067616d652e00290152657475726e204f6b28282929206966207468652067616d65206973206372656174656420616e6420746865206d6574616461746120697320736574207375636365737366756c6c792e447365745f67616d655f6d6574616461746108011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00011067616d65100124543a3a47616d654964002c2c745365747320746865206d6574616461746120666f7220612067616d652e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e51012a20606461746160202d20546865206d6574616461746120746f2073657420666f72207468652067616d652c20626f756e646564206279207468652060537472696e674c696d697460206173736f6369617465641c2020747970652e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e4c636c6561725f67616d655f6d6574616461746104011067616d65100124543a3a47616d654964002d247c436c6561727320746865206d6574616461746120666f7220612067616d652e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e746372656174655f64796e616d69635f706f6f6c5f776974685f646174611001286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002e38bc4372656174657320612064796e616d696320706f6f6c2077697468207468652073706563696669656420646174612e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2ee42a20606c6f6f745f7461626c6560202d20546865206c6f6f74207461626c65206173736f63696174656420776974682074686520706f6f6c2eac2a206061646d696e60202d205468652061646d696e206163636f756e7420666f722074686520706f6f6c2ecc2a20606d696e745f73657474696e677360202d20546865206d696e742073657474696e677320666f722074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e73005d0152657475726e7320604f6b284469737061746368526573756c7457697468506f7374496e666f296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e486572726f722069732072657475726e65642e706372656174655f737461626c655f706f6f6c5f776974685f646174611001286c6f6f745f7461626c65f801944c6f6f745461626c653c543a3a436f6c6c656374696f6e49642c20543a3a4974656d49643e00011461646d696eed0101504163636f756e7449644c6f6f6b75704f663c543e0001346d696e745f73657474696e67732d0201544d696e7453657474696e6773466f723c542c20493e00011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e002f38b843726561746573206120737461626c6520706f6f6c2077697468207468652073706563696669656420646174612e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2ee42a20606c6f6f745f7461626c6560202d20546865206c6f6f74207461626c65206173736f63696174656420776974682074686520706f6f6c2eac2a206061646d696e60202d205468652061646d696e206163636f756e7420666f722074686520706f6f6c2ecc2a20606d696e745f73657474696e677360202d20546865206d696e742073657474696e677320666f722074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e73005d0152657475726e7320604f6b284469737061746368526573756c7457697468506f7374496e666f296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e486572726f722069732072657475726e65642e447365745f706f6f6c5f6d65746164617461080110706f6f6c100124543a3a506f6f6c496400011064617461b40178426f756e6465645665633c75382c20543a3a537472696e674c696d69743e00302c745365747320746865206d6574616461746120666f72206120706f6f6c2e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e782a2060706f6f6c60202d20546865204944206f662074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e4c636c6561725f706f6f6c5f6d65746164617461040110706f6f6c100124543a3a506f6f6c496400312c745365747320746865206d6574616461746120666f72206120706f6f6c2e002c2320417267756d656e747300ac2a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2e782a2060706f6f6c60202d20546865204944206f662074686520706f6f6c2ec02a20606461746160202d20546865206461746120746f207365742061732074686520706f6f6c206d657461646174612e0024232052657475726e7300490152657475726e7320604f6b282829296020696620746865206f7065726174696f6e20776173207375636365737366756c2e204f74686572776973652c20616e206572726f722069732072657475726e65642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e19020c2c70616c6c65745f6e667473147479706573284974656d436f6e666967000004012073657474696e67731d0201304974656d53657474696e677300001d020c2c70616c6c65745f6e66747314747970657320426974466c6167730404540121020004002c012c4974656d53657474696e67000021020c2c70616c6c65745f6e6674731474797065732c4974656d53657474696e6700010c305472616e7366657261626c6500010040556e6c6f636b65644d6574616461746100020048556e6c6f636b6564417474726962757465730004000025021030676166695f737570706f72741067616d6514747970657324547261646554797065000118205365745072696365000000185365744275790001001842756e646c6500020020576973686c6973740003001c41756374696f6e000400105377617000050000290204184f7074696f6e04045401ed010108104e6f6e6500000010536f6d650400ed0100000100002d021030676166695f737570706f72741067616d65147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001001246d696e745f74797065310201584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365180114507269636500012c73746172745f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000031021030676166695f737570706f72741067616d65147479706573204d696e74547970650430436f6c6c656374696f6e496401100108185075626c696300000020486f6c6465724f660400100130436f6c6c656374696f6e49640001000035020c3c67616d655f72616e646f6d6e6573731870616c6c65741043616c6c0404540001046c7375626d69745f72616e646f6d5f736565645f756e7369676e6564080130626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0001107365656404011053656564000024645375626d69742061206e65772072616e646f6d20736565642e005501546869732066756e6374696f6e20736574732061206e65772060736565646020666f722072616e646f6d6e65737320696e2065766572792060543a3a556e7369676e6564496e74657276616c6020626c6f636b732e00302320506172616d657465727300c82d20606f726967696e603a204163636570746564206f6e6c7920627920746865206f66662d636861696e20776f726b65722e9c2d2060626c6f636b5f6e756d626572603a2043757272656e7420626c6f636b206e756d6265722e682d206073656564603a204e65772072616e646f6d20736565642e042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e39020c3470616c6c65745f6661756365741870616c6c65741043616c6c04045400010818666175636574000014186661756365740064546865206f726967696e206d757374206265205369676e656400385765696768743a20604f2831296018646f6e617465040118616d6f756e7418013042616c616e63654f663c543e00012018646f6e6174650064546865206f726967696e206d757374206265205369676e6564002c506172616d65746572733a6c2d2060616d6f756e74603a20646f6e6174696f6e20616d6f756e7400385765696768743a20604f28312960042501436f6e7461696e73206f6e652076617269616e742070657220646973706174636861626c6520746861742063616e2062652063616c6c656420627920616e2065787472696e7369632e3d020c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000047c53656e646572206d75737420626520746865205375646f206163636f756e7404644572726f7220666f7220746865205375646f2070616c6c657441020c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e44657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001801146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e63650001146974656d7310010c7533320001386974656d5f6d657461646174617310010c7533320001306974656d5f636f6e6669677310010c7533320001286174747269627574657310010c753332000045020000040c001010004902000004080010004d020000040810000051020c2c70616c6c65745f6e66747314747970657320426974466c616773040454015502000400080138436f6c6c656374696f6e526f6c65000055020c2c70616c6c65745f6e66747314747970657338436f6c6c656374696f6e526f6c6500010c184973737565720001001c467265657a65720002001441646d696e0004000059020c2c70616c6c65745f6e6674731474797065732c4974656d44657461696c730c244163636f756e74496401001c4465706f736974015d0224417070726f76616c73016102000c01146f776e65720001244163636f756e744964000124617070726f76616c7361020124417070726f76616c7300011c6465706f7369745d02011c4465706f73697400005d020c2c70616c6c65745f6e6674731474797065732c4974656d4465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e740001244163636f756e744964000118616d6f756e741801384465706f73697442616c616e6365000061020c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f6d61703c426f756e64656442547265654d61700c044b0100045601b00453000004006502013842547265654d61703c4b2c20563e00006502042042547265654d617008044b0100045601b0000400690200000069020000026d02006d020000040800b00071020c2c70616c6c65745f6e66747314747970657348436f6c6c656374696f6e4d65746164617461081c4465706f73697401182c537472696e674c696d6974000008011c6465706f73697418011c4465706f73697400011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e000075020c2c70616c6c65745f6e667473147479706573304974656d4d65746164617461081c4465706f7369740179022c537472696e674c696d6974000008011c6465706f7369747902011c4465706f73697400011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e000079020c2c70616c6c65745f6e6674731474797065734c4974656d4d657461646174614465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74a401444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e636500007d020000041010b0c0bc00810200000408bc85020085020c2c70616c6c65745f6e667473147479706573404174747269627574654465706f73697408384465706f73697442616c616e63650118244163636f756e74496401000008011c6163636f756e74a401444f7074696f6e3c4163636f756e7449643e000118616d6f756e741801384465706f73697442616c616e6365000089020000040818a4008d020c4c626f756e6465645f636f6c6c656374696f6e7344626f756e6465645f62747265655f7365743c426f756e646564425472656553657408045401000453000004009102012c42547265655365743c543e00009102042042547265655365740404540100000400fd0100000095020c2c70616c6c65745f6e6674731474797065732c50656e64696e67537761701030436f6c6c656374696f6e49640110184974656d49640110584974656d507269636557697468446972656374696f6e01c820446561646c696e65011000100148646573697265645f636f6c6c656374696f6e100130436f6c6c656374696f6e4964000130646573697265645f6974656db001384f7074696f6e3c4974656d49643e0001147072696365c401784f7074696f6e3c4974656d507269636557697468446972656374696f6e3e000120646561646c696e65100120446561646c696e65000099020c2c70616c6c65745f6e66747314747970657340436f6c6c656374696f6e436f6e6669670c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110000c012073657474696e67739d020148436f6c6c656374696f6e53657474696e67730001286d61785f737570706c79b0012c4f7074696f6e3c7533323e0001346d696e745f73657474696e6773a50201b84d696e7453657474696e67733c50726963652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e00009d020c2c70616c6c65745f6e66747314747970657320426974466c61677304045401a1020004002c0144436f6c6c656374696f6e53657474696e670000a1020c2c70616c6c65745f6e66747314747970657344436f6c6c656374696f6e53657474696e67000114445472616e7366657261626c654974656d7300010040556e6c6f636b65644d6574616461746100020048556e6c6f636b65644174747269627574657300040044556e6c6f636b65644d6178537570706c790008003c4465706f736974526571756972656400100000a5020c2c70616c6c65745f6e667473147479706573304d696e7453657474696e67730c14507269636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e49640110001401246d696e745f74797065a90201584d696e74547970653c436f6c6c656374696f6e49643e0001147072696365e801344f7074696f6e3c50726963653e00012c73746172745f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e00015464656661756c745f6974656d5f73657474696e67731d0201304974656d53657474696e67730000a9020c2c70616c6c65745f6e667473147479706573204d696e74547970650430436f6c6c656374696f6e49640110010c18497373756572000000185075626c696300010020486f6c6465724f660400100130436f6c6c656374696f6e496400020000ad020c2c70616c6c65745f6e66747314747970657320426974466c61677304045401b1020004002c013450616c6c6574466561747572650000b1020c2c70616c6c65745f6e6674731474797065733450616c6c6574466561747572650001101c54726164696e67000100284174747269627574657300020024417070726f76616c7300040014537761707300080000b5020c2c70616c6c65745f6e6674731870616c6c6574144572726f720804540004490001b0304e6f5065726d697373696f6e000004e8546865207369676e696e67206163636f756e7420686173206e6f207065726d697373696f6e20746f20646f20746865206f7065726174696f6e2e44556e6b6e6f776e436f6c6c656374696f6e0001047454686520676976656e206974656d20494420697320756e6b6e6f776e2e34416c7265616479457869737473000204b8546865206974656d2049442068617320616c7265616479206265656e207573656420666f7220616e206974656d2e3c417070726f76616c45787069726564000304390154686520617070726f76616c20686164206120646561646c696e65207468617420657870697265642c20736f2074686520617070726f76616c2069736e27742076616c696420616e796d6f72652e2857726f6e674f776e6572000404e8546865206f776e6572207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e284261645769746e6573730005041501546865207769746e657373206461746120676976656e20646f6573206e6f74206d61746368207468652063757272656e74207374617465206f662074686520636861696e2e44436f6c6c656374696f6e4964496e5573650006047c436f6c6c656374696f6e20494420697320616c72656164792074616b656e2e504974656d734e6f6e5472616e7366657261626c65000704c84974656d732077697468696e207468617420636f6c6c656374696f6e20617265206e6f6e2d7472616e7366657261626c652e2c4e6f7444656c65676174650008049c5468652070726f7669646564206163636f756e74206973206e6f7420612064656c65676174652e3457726f6e6744656c6567617465000904f45468652064656c6567617465207475726e6564206f757420746f20626520646966666572656e7420746f2077686174207761732065787065637465642e28556e617070726f766564000a04c44e6f20617070726f76616c20657869737473207468617420776f756c6420616c6c6f7720746865207472616e736665722e28556e6163636570746564000b041901546865206e616d6564206f776e657220686173206e6f74207369676e6564206f776e65727368697020616363657074616e6365206f662074686520636f6c6c656374696f6e2e284974656d4c6f636b6564000c0498546865206974656d206973206c6f636b656420286e6f6e2d7472616e7366657261626c65292e504c6f636b65644974656d41747472696275746573000d04744974656d2773206174747269627574657320617265206c6f636b65642e684c6f636b6564436f6c6c656374696f6e41747472696275746573000e048c436f6c6c656374696f6e2773206174747269627574657320617265206c6f636b65642e484c6f636b65644974656d4d65746164617461000f04684974656d2773206d65746164617461206973206c6f636b65642e604c6f636b6564436f6c6c656374696f6e4d6574616461746100100480436f6c6c656374696f6e2773206d65746164617461206973206c6f636b65642e404d6178537570706c79526561636865640011046c416c6c206974656d732068617665206265656e206d696e7465642e3c4d6178537570706c794c6f636b6564001204b8546865206d617820737570706c79206973206c6f636b656420616e642063616e2774206265206368616e6765642e444d6178537570706c79546f6f536d616c6c00130449015468652070726f7669646564206d617820737570706c79206973206c657373207468616e20746865206e756d626572206f66206974656d73206120636f6c6c656374696f6e20616c7265616479206861732e2c556e6b6e6f776e4974656d0014047454686520676976656e206974656d20494420697320756e6b6e6f776e2e2c556e6b6e6f776e537761700015044c5377617020646f65736e27742065786973742e404d657461646174614e6f74466f756e640016048c54686520676976656e206974656d20686173206e6f206d65746164617461207365742e444174747269627574654e6f74466f756e64001704985468652070726f7669646564206174747269627574652063616e277420626520666f756e642e284e6f74466f7253616c65001804544974656d206973206e6f7420666f722073616c652e24426964546f6f4c6f77001904705468652070726f76696465642062696420697320746f6f206c6f772e5052656163686564417070726f76616c4c696d6974001a04a0546865206974656d2068617320726561636865642069747320617070726f76616c206c696d69742e3c446561646c696e6545787069726564001b048454686520646561646c696e652068617320616c726561647920657870697265642e3457726f6e674475726174696f6e001c043101546865206475726174696f6e2070726f76696465642073686f756c64206265206c657373207468616e206f7220657175616c20746f20604d6178446561646c696e654475726174696f6e602e384d6574686f6444697361626c6564001d04a8546865206d6574686f642069732064697361626c65642062792073797374656d2073657474696e67732e3057726f6e6753657474696e67001e04885468652070726f76696465642073657474696e672063616e2774206265207365742e58496e636f6e73697374656e744974656d436f6e666967001f0415014974656d277320636f6e66696720616c72656164792065786973747320616e642073686f756c6420626520657175616c20746f207468652070726f7669646564206f6e652e204e6f436f6e666967002004c8436f6e66696720666f72206120636f6c6c656374696f6e206f7220616e206974656d2063616e277420626520666f756e642e3c526f6c65734e6f74436c656172656400210470536f6d6520726f6c65732077657265206e6f7420636c65617265642e384d696e744e6f7453746172746564002204644d696e7420686173206e6f742073746172746564207965742e244d696e74456e6465640023045c4d696e742068617320616c726561647920656e6465642e38416c7265616479436c61696d6564002404c05468652070726f7669646564204974656d2077617320616c7265616479207573656420666f7220636c61696d696e672e34496e636f7272656374446174610025047c5468652070726f7669646564206461746120697320696e636f72726563742e2c57726f6e674f726967696e002604ac5468652065787472696e736963207761732073656e74206279207468652077726f6e67206f726967696e2e3857726f6e675369676e6174757265002704905468652070726f7669646564207369676e617475726520697320696e636f72726563742e44496e636f72726563744d65746164617461002804a05468652070726f7669646564206d65746164617461206d6967687420626520746f6f206c6f6e672e644d6178417474726962757465734c696d6974526561636865640029049c43616e277420736574206d6f7265206174747269627574657320706572206f6e652063616c6c2e3857726f6e674e616d657370616365002a04d05468652070726f7669646564206e616d6573706163652069736e277420737570706f7274656420696e20746869732063616c6c2e48436f6c6c656374696f6e4e6f74456d707479002b048c43616e27742064656c657465206e6f6e2d656d70747920636f6c6c656374696f6e732e04b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909b9020c2c70616c6c65745f67616d651474797065732c47616d6544657461696c7308244163636f756e7449640100384465706f73697442616c616e63650118001001146f776e65720001244163636f756e7449640001346f776e65725f6465706f7369741801384465706f73697442616c616e636500012c636f6c6c656374696f6e7310010c75333200011461646d696e0001244163636f756e7449640000bd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400b801185665633c543e0000c1020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540110045300000400b801185665633c543e0000c5020c2c70616c6c65745f67616d651474797065733047616d654d65746164617461042c537472696e674c696d6974000004011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e0000c9020c2c70616c6c65745f67616d6514747970657330506f6f6c4d65746164617461042c537472696e674c696d6974000004011064617461b4016c426f756e6465645665633c75382c20537472696e674c696d69743e0000cd020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401fc045300000400f801185665633c543e0000d1020c2c70616c6c65745f67616d651474797065732c506f6f6c44657461696c7310244163636f756e74496401001c42616c616e636501182c426c6f636b4e756d626572011030436f6c6c656374696f6e4964011000140124706f6f6c5f74797065f40120506f6f6c547970650001146f776e65720001244163636f756e7449640001346f776e65725f6465706f73697418011c42616c616e636500011461646d696e0001244163636f756e7449640001346d696e745f73657474696e67732d0201c04d696e7453657474696e67733c42616c616e63652c20426c6f636b4e756d6265722c20436f6c6c656374696f6e49643e0000d5020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d902045300000400dd0201185665633c543e0000d9020c2c70616c6c65745f67616d651474797065732c4d696e745265717565737410244163636f756e744964010018506f6f6c496401101c42616c616e636501182c426c6f636b4e756d6265720110001c01146d696e65720001244163636f756e744964000110706f6f6c100118506f6f6c49640001187461726765740001244163636f756e744964000118616d6f756e74100118416d6f756e740001286d696e696e675f66656518011c42616c616e63650001346d696e65725f7265736572766518011c42616c616e6365000130626c6f636b5f6e756d62657210012c426c6f636b4e756d6265720000dd02000002d90200e1020000040c10101000e5020c2c70616c6c65745f67616d6514747970657344557067726164654974656d436f6e66696708184974656d496401101450726963650118000801106974656d1001184974656d496400010c66656518011450726963650000e9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401e4045300000400e001185665633c543e0000ed020c2c70616c6c65745f67616d651474797065732c5472616465436f6e66696710244163636f756e744964010014507269636501181842756e646c6501e9022c426c6f636b4e756d6265720110001801147472616465250201245472616465547970650001146f776e65720001244163636f756e74496400012c6d617962655f7072696365e801344f7074696f6e3c50726963653e0001386d617962655f7265717569726564f10201384f7074696f6e3c42756e646c653e00012c73746172745f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e000124656e645f626c6f636bb0014c4f7074696f6e3c426c6f636b4e756d6265723e0000f10204184f7074696f6e04045401e9020108104e6f6e6500000010536f6d650400e9020000010000f5020c2c70616c6c65745f67616d651474797065733441756374696f6e436f6e6669670c244163636f756e744964010014507269636501182c426c6f636b4e756d6265720110001001146f776e65720001244163636f756e74496400012c6d617962655f7072696365e801344f7074696f6e3c50726963653e00012c73746172745f626c6f636b10012c426c6f636b4e756d6265720001206475726174696f6e10012c426c6f636b4e756d6265720000f9020c2c70616c6c65745f67616d651870616c6c6574144572726f720804540004490001cc304e6f5065726d697373696f6e0000002c556e6b6e6f776e47616d6500010044556e6b6e6f776e436f6c6c656374696f6e0002002c556e6b6e6f776e4974656d00030030556e6b6e6f776e547261646500040038556e6b6e6f776e5570677261646500050038556e6b6e6f776e41756374696f6e00060028556e6b6e6f776e42696400070044556e6b6e6f776e416363657074616e636500080044556e6b6e6f776e4d696e696e67506f6f6c000900404d657461646174614e6f74466f756e64000a00344578636565644d61784974656d000b04bc45786365656420746865206d6178696d756d20616c6c6f776564206974656d20696e206120636f6c6c656374696f6e44457863656564546f74616c416d6f756e74000c042901546865206e756d626572206d696e746564206974656d73207265717569726520657863656564732074686520617661696c61626c65206974656d7320696e2074686520726573657276654c457863656564416c6c6f776564416d6f756e74000d040501546865206e756d626572206d696e746564206974656d73207265717569726520657863656564732074686520616d6f756e7420616c6c6f776564207065722074784c4578636565644d6178436f6c6c656374696f6e000e04bc45786365656420746865206d6178696d756d20616c6c6f77656420636f6c6c656374696f6e20696e20612067616d65484578636565644d617847616d655368617265000f042d01457863656564656420746865206d6178696d756d206e756d626572206f662067616d657320746861742063616e20626520736861726564206265747765656e20636f6c6c656374696f6e733c4578636565644d617842756e646c6500100488457863656564206d617820636f6c6c656374696f6e7320696e20612062756e646c65344578636565644d61784c6f6f740011046c457863656564206d6178206c6f6f747320696e2061207461626c651c536f6c644f7574001200545769746864726177526573657276654661696c656400130444546f6f206d616e7920617474656d707473345570677261646545786973747300140040436f6c6c656374696f6e4578697374730015048c416464207468652073616d6520636f6c6c656374696f6e20696e746f20612067616d655c496e73756666696369656e744974656d42616c616e63650016006c496e73756666696369656e74526573657276656442616c616e636500170034496e76616c6964416d6f756e740018043c6974656d20616d6f756e74203d2030284974656d4c6f636b6564001904805472616e73666572206973206c6f636b656420666f7220616e7920747261646524426964546f6f4c6f77001a049054686520626964206973206c6f776572207468616e20746865207365742070726963652e2841736b546f6f48696768001b04b85468652061736b696e6720707269636520697320686967686572207468616e20746865207365742070726963652e2c47616d654964496e557365001c003054726164654964496e557365001d002c506f6f6c4964496e557365001e003c54726164654e6f7453746172746564001f00285472616465456e6465640020004c496e636f7272656374436f6c6c656374696f6e00210034496e636f72726563744974656d0022004441756374696f6e496e50726f67726573730023004441756374696f6e4e6f74537461727465640024003041756374696f6e456e6465640025002c4e6f745365745072696365002600244e6f7442756e646c650027002c4e6f74576973686c6973740028001c4e6f7453776170002900284e6f7441756374696f6e002a00244e6f74536574427579002b0038496e66696e697465537570706c79002c00444e6f74496e66696e697465537570706c79002d00284d696e744661696c6564002e00384d696e744e6f7453746172746564002f00244d696e74456e646564003000384e6f7457686974656c69737465640031002c4f7665725265717565737400320004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a090909fd02083c67616d655f72616e646f6d6e6573732c536565645061796c6f6164082c426c6f636b4e756d62657201101053656564010400080130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011073656564040110536565640000010308346672616d655f737570706f72742050616c6c65744964000004006901011c5b75383b20385d000005030c3c67616d655f72616e646f6d6e6573731870616c6c6574144572726f720404540001042c496e76616c69645365656400000004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090909030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540100045300000400fd0101185665633c543e00000d030c3470616c6c65745f6661756365741870616c6c6574144572726f720404540001143053656c665472616e73666572000000404e6f74456e6f75676842616c616e636500010030446f6e74426547726565647900020028506c65617365576169740003002c4f75744f6646617563657400040004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a09090911030c3070616c6c65745f63616368651870616c6c657410466c6167000108104c6566740000001452696768740001000015030000040800000019030c3070616c6c65745f63616368651870616c6c6574205772617044617461041044617461011800080110646174611801104461746100012474696d657374616d701801107531323800001d030c3070616c6c65745f63616368651870616c6c6574144572726f7208045400044900010004b5010a090909437573746f6d205b6469737061746368206572726f72735d2868747470733a2f2f646f63732e7375627374726174652e696f2f6d61696e2d646f63732f6275696c642f6576656e74732d6572726f72732f290a0909096f6620746869732070616c6c65742e0a0909092103102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c4164647265737301ed011043616c6c011102245369676e6174757265012503144578747261013503000400340000002503082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400a1010148656432353531393a3a5369676e61747572650000001c53723235353139040029030148737232353531393a3a5369676e617475726500010014456364736104002d03014065636473613a3a5369676e61747572650002000029030c1c73705f636f72651c73723235353139245369676e617475726500000400a50101205b75383b2036345d00002d030c1c73705f636f7265146563647361245369676e617475726500000400310301205b75383b2036355d0000310300000341000000080035030000042039033d0341034503490351035503590300390310306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e646572040454000000003d0310306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000410310306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000450310306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000490310306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004004d03010c45726100004d03102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000510310306672616d655f73797374656d28657874656e73696f6e732c636865636b5f6e6f6e636528436865636b4e6f6e63650404540000040025010120543a3a496e6465780000550310306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000005903086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e7404045400000400f901013042616c616e63654f663c543e00005d03083467616d65335f72756e74696d651c52756e74696d6500000000341853797374656d011853797374656d401c4163636f756e7401010402000c4101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e2c426c6f636b576569676874010020180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510308000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510340400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003080000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e18446967657374010038040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004804001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023019010400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e004d01205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d65557067726164650000210104000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100ac0400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100ac0400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500001101040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e012d0101541830426c6f636b576569676874733d01f9010203815d000b00204aa9d10113ffffffffffffffffc2e9171b00010b90cd43a72e011366666666666666a6010b0098f73e5d0113ffffffffffffffbf010000c2e9171b00010b90559611a3011366666666666666e6010b00204aa9d10113ffffffffffffffff01070088526a74130000000000000040c2e9171b0000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e6774684d013000003c00000050000000500004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687455014040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e590189021467616d65331467616d65330100000072000000010000002cdf6acb689907609b0400000037e397fc7c91f5e40200000040fe3ad401f8959a06000000d2bc9897eed08f1503000000f78b278be53f454c02000000dd718d5cc53262d401000000ab3c0572291feb8b01000000ed99c5acb25eedf503000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab5270590300000001000000010484204765742074686520636861696e27732063757272656e742076657273696f6e2e28535335385072656669786d01082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e017101006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100750104000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701002c20000000000000000004902043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e244469645570646174650100ac040004b420446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f0179010004344d696e696d756d506572696f642c20b80b000000000000104d0120546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a5d0120706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c5d012067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c206265a020646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e000210417572610000000000031c4772616e647061011c4772616e6470611814537461746501007d0104000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e676500008101040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c656400001d010400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e74536574496401002c200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e000104052c1004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e018901017808384d6178417574686f726974696573101020000000045c204d617820417574686f72697469657320696e20757365584d6178536574496453657373696f6e456e74726965732c20000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01bd01042042616c616e636573012042616c616e6365731c34546f74616c49737375616e6365010018400000000000000000000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e636501001840000000000000000000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200c101040008b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e2052657365727665730101040200d101040004a4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e14486f6c64730101040200dd010400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a65730101040200dd010400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e01e901018c14484578697374656e7469616c4465706f7369741840f401000000000000000000000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000008f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e2c4d61785265736572766573101000000000040d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e204d6178486f6c647310100000000004190120546865206d6178696d756d206e756d626572206f6620686f6c647320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e284d6178467265657a657310100000000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01010205485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100050240000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e0100090204000000019404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c6974706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f7269747960004d0120546869732076616c7565206973206d756c7469706c656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e0006105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e010d02019800013d0207104e66747301104e6674733c28436f6c6c656374696f6e00010402104102040004642044657461696c73206f66206120636f6c6c656374696f6e2e4c4f776e657273686970416363657074616e636500010402001004000429012054686520636f6c6c656374696f6e2c20696620616e792c206f6620776869636820616e206163636f756e742069732077696c6c696e6720746f2074616b65206f776e6572736869702e1c4163636f756e7400010c0202024502a0040008590120546865206974656d732068656c6420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f2074686174206974656d73206f776e656420627920612073696e676c656c206163636f756e742063616e20626520656e756d6572617465642e44436f6c6c656374696f6e4163636f756e7400010802024902a004000869012054686520636f6c6c656374696f6e73206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f207468617420636f6c6c656374696f6e73206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e40436f6c6c656374696f6e526f6c654f6600010802024d025102040008d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732ea02053746f72657320636f6c6c656374696f6e20726f6c657320617320706572206163636f756e742e104974656d00010802021d015902040004d020546865206974656d7320696e206578697374656e636520616e64207468656972206f776e6572736869702064657461696c732e50436f6c6c656374696f6e4d657461646174614f660001040210710204000468204d65746164617461206f66206120636f6c6c656374696f6e2e384974656d4d657461646174614f6600010802021d01750204000454204d65746164617461206f6620616e206974656d2e24417474726962757465000110020202027d028102040004702041747472696275746573206f66206120636f6c6c656374696f6e2e2c4974656d50726963654f6600010802021d018902040004502041207072696365206f6620616e206974656d2e644974656d41747472696275746573417070726f76616c734f6601010802021d018d0204000468204974656d2061747472696275746520617070726f76616c732e404e657874436f6c6c656374696f6e496400001004000831012053746f726573207468652060436f6c6c656374696f6e496460207468617420697320676f696e6720746f206265207573656420666f7220746865206e65787420636f6c6c656374696f6e2ef02054686973206765747320696e6372656d656e746564207768656e657665722061206e657720636f6c6c656374696f6e20697320637265617465642e3450656e64696e67537761704f6600010802021d0195020400047c2048616e646c657320616c6c207468652070656e64696e672073776170732e48436f6c6c656374696f6e436f6e6669674f66000104021099020400046020436f6e666967206f66206120636f6c6c656374696f6e2e304974656d436f6e6669674f6600010802021d0119020400044c20436f6e666967206f6620616e206974656d2e0001a83844436f6c6c656374696f6e4465706f7369741840020000000000000000000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220636f6c6c656374696f6e2e2c4974656d4465706f73697418400100000000000000000000000000000004f42054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e206974656d2e4c4d657461646174614465706f73697442617365184001000000000000000000000000000000044d012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e67206d6574616461746120746f20796f7572206974656d2e504174747269627574654465706f736974426173651840010000000000000000000000000000000455012054686520626173696320616d6f756e74206f662066756e64732074686174206d757374206265207265736572766564207768656e20616464696e6720616e2061747472696275746520746f20616e206974656d2e384465706f7369745065724279746518400100000000000000000000000000000008590120546865206164646974696f6e616c2066756e64732074686174206d75737420626520726573657276656420666f7220746865206e756d626572206f662062797465732073746f726520696e206d657461646174612cc02065697468657220226e6f726d616c22206d65746164617461206f7220617474726962757465206d657461646174612e2c537472696e674c696d697410102c01000004b020546865206d6178696d756d206c656e677468206f6620646174612073746f726564206f6e2d636861696e2e204b65794c696d697410103200000004a020546865206d6178696d756d206c656e677468206f6620616e20617474726962757465206b65792e2856616c75654c696d697410103200000004a820546865206d6178696d756d206c656e677468206f6620616e206174747269627574652076616c75652e38417070726f76616c734c696d697410100a00000004a820546865206d6178696d756d20617070726f76616c7320616e206974656d20636f756c6420686176652e704974656d41747472696275746573417070726f76616c734c696d697410100200000004d420546865206d6178696d756d206174747269627574657320617070726f76616c7320616e206974656d20636f756c6420686176652e1c4d61785469707310100a00000004a820546865206d6178206e756d626572206f6620746970732061207573657220636f756c642073656e642e4c4d6178446561646c696e654475726174696f6e10101027000004a820546865206d6178206475726174696f6e20696e20626c6f636b7320666f7220646561646c696e65732e504d61784174747269627574657350657243616c6c10100200000004e020546865206d6178206e756d626572206f6620617474726962757465732061207573657220636f756c6420736574207065722063616c6c2e204665617475726573ad0220000000000000000004902044697361626c657320736f6d65206f662070616c6c657427732066656174757265732e01b502081047616d65011047616d65641047616d650001040510b902040004602053746f72696e672062617369632067616d6520696e666f2c47616d654163636f756e7400010802024902a00400083901205468652067616d6573206f776e656420627920616e7920676976656e206163636f756e743b20736574206f757420746869732077617920736f20746861742067616d6573206f776e65642062799020612073696e676c65206163636f756e742063616e20626520656e756d6572617465642e284e65787447616d654964000010040004542053746f72696e67206e6578742067616d652069642c4e65787454726164654964000010040004582053746f72696e67206e657874207472616465206964284e657874506f6f6c4964000010040004742053746f72696e67206e657874206d696e74696e6720706f6f6c20696434436f6c6c656374696f6e734f660101040510bd020400046020436f6c6c656374696f6e7320696e207468652067616d651c47616d65734f660101040510c1020400045820436f6c6c656374696f6e2062656c6f6e677320746f3847616d654d657461646174614f660001040210c50204000450204d65746164617461206f6620612067616d652e38506f6f6c4d657461646174614f660001040210c90204000450204d65746164617461206f66206120706f6f6c2e2847616d65526f6c654f6600010802024d0251020400042c2047616d6520726f6c6573344974656d42616c616e63654f6601010c02020545021010000000000464204974656d2062616c616e636573206f66206163636f756e7444526573657276656442616c616e63654f6601010c020205450210100000000004642053746f72696e672072657365727665642062616c616e636520537570706c794f6600010802021d01b0040004dc2053746f72696e67204e667420737570706c6965732c20604e6f6e656020696e6469636174657320696e66696e69746520737570706c792c4c6f6f745461626c654f660101040010cd02040004d4204974656d207265736572766520666f722072616e646f6d206d696e74696e67206372656174656420627920746865206f776e657218506f6f6c4f660001040510d1020400048c2053746f72696e67206d696e74696e6720706f6f6c20636f6e66696775726174696f6e344d696e74526571756573744f660101040510d502040004542053746f72696e67206d696e7420726571756573741c4c6576656c4f6601010802021d011010000000000438204c6576656c206f66206974656d304f726967696e4974656d4f66000104021d011d01040004c42053746f72696e6720746865206f726967696e616c206974656d73206f6620746865207570677261646564206974656d733c55706772616465436f6e6669674f6600010c020202e102e5020400046c2053746f72696e6720746865207570677261646520636f6e6669672852616e646f6d536565640100048000000000000000000000000000000000000000000000000000000000000000000411012053746f72696e672072616e646f6d20736565642067656e6572617465642066726f6d20746865206f66662d636861696e20776f726b657220657665727920626c6f636b2042756e646c654f660101040210e9020400043c2053746f72696e672062756e646c65345472616465436f6e6669674f660001040210ed02040004702053746f72696e6720747261646520636f6e66696775726174696f6e3c41756374696f6e436f6e6669674f660001040210f502040004782053746f72696e672061756374696f6e20636f6e66696775726174696f6e30486967686573744269644f660001040210f00400048c2053746f72696e6720746865206869676865737420626964206f662061756374696f6e40416464696e67416363657074616e6365000104021010040004b82053746f7265206163636570747320746f2061646420636f6c6c656374696f6e7320746f207468652067616d657301150201d4302c47616d654465706f736974184000002cf61a24a229000000000000000004f02054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220612067616d652e444d696e696e67506f6f6c4465706f736974184000002cf61a24a22900000000000000000411012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f722061206d696e74696e6720706f6f6c2e444d617847616d65436f6c6c656374696f6e10100500000004a8204d6178696d756d206e756d626572206f6620636f6c6c656374696f6e7320696e2061202067616d652e304d617847616d65536861726510100500000004c0204d6178696d756d206e756d626572206f662067616d6573206120636f6c6c656374696f6e2063616e2073686172652e1c4d61784974656d10101400000004cc204d6178696d756d206e756d626572206f66206974656d2074686174206120636f6c6c656374696f6e20636f756c64206861732c4d61784d696e744974656d10100a000000048c204d6178696d756d206e756d626572206f66206974656d206d696e746564206f6e636538557067726164654465706f7369741840000064a7b3b6e00d00000000000000000405012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e7920757067726164652e244d617842756e646c6510100a00000004a4204d6178696d756d20636f6c6c656374696f6e20696e20612062756e646c6520666f722074726164651c4d61784c6f6f7410100a00000004b8204d6178696d756d206e756d626572206f66206c6f6f7420746861742061207461626c6520636f756c64206861733442756e646c654465706f73697418400000c84e676dc11b00000000000000000401012054686520626173696320616d6f756e74206f662066756e64732074686174206d75737420626520726573657276656420666f7220616e792062756e646c652e384d61784d696e745265717565737410100a00000004b8204d6178696d756d206e756d626572206f66206d696e74696e672072657175657374732070657220626c6f636b2e304d696e74496e74657276616c101002000000040d01204e756d626572206f6620626c6f636b73206f6620636f6f6c646f776e20726571756972656420746f2070726f63657373206d696e74696e672072657175657374732e01f902093847616d6552616e646f6d6e657373013847616d6552616e646f6d6e65737308384e657874556e7369676e656441740100101000000000140d0120446566696e65732074686520626c6f636b207768656e206e65787420756e7369676e6564207472616e73616374696f6e2077696c6c2062652061636365707465642e001d0120546f2070726576656e74207370616d206f6620756e7369676e65642028616e6420756e706169642129207472616e73616374696f6e73206f6e20746865206e6574776f726b2c0901207765206f6e6c7920616c6c6f77206f6e65207472616e73616374696f6e2065766572792060543a3a556e7369676e6564496e74657276616c6020626c6f636b732e250120546869732073746f7261676520656e74727920646566696e6573207768656e206e6577207472616e73616374696f6e20697320676f696e6720746f2062652061636365707465642e2852616e646f6d536565640000fd02040004e42053746f72696e672072616e646f6d20736565642067656e6572617465642066726f6d20746865206f66662d636861696e20776f726b65722e013502010501102050616c6c6574496401032067616d65726e64730040556e7369676e65645072696f726974792c20320000000000000010f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e40556e7369676e6564496e74657276616c101001000000101501204e756d626572206f6620626c6f636b73206f6620636f6f6c646f776e20616674657220756e7369676e6564207472616e73616374696f6e20697320696e636c756465642e005901205468697320656e73757265732074686174207765206f6e6c792061636365707420756e7369676e6564207472616e73616374696f6e73206f6e63652c2065766572792060556e7369676e6564496e74657276616c602020626c6f636b732e3452616e646f6d417474656d707310100a000000041101204e756d626572206f6620617474656d70747320746f2072652d72616e646f6d697a6520696e206f7264657220746f20726564756365206d6f64756c757320626961732e0105030a184661756365740118466175636574043c47656e657369734163636f756e7473010009030400046420486f6c64696e6720616c6c20746865206163636f756e747301390201090100010d030b2c50616c6c65744361636865012c50616c6c65744361636865102044617461466c61670100110304000020446174614c6566740001080505150319030400040d0120486f6c64696e67207468652064617461207468617420696e7365727420696e204361636865206279206b657973204163636f756e74496420616e6420416374696f6e244461746152696768740001080505150319030400040d0120486f6c64696e67207468652064617461207468617420696e7365727420696e204361636865206279206b657973204163636f756e74496420616e6420416374696f6e204d61726b54696d6501001840a0d6e2838a01000000000000000000000000010d010424436c65616e54696d6518404038000000000000000000000000000004a82043616368652077696c6c20636c65616e20746865206461746120616674657220746869732074696d65011d030c2103042048436865636b4e6f6e5a65726f53656e6465723903a040436865636b5370656356657273696f6e3d031038436865636b547856657273696f6e41031030436865636b47656e6573697345033038436865636b4d6f7274616c69747949033028436865636b4e6f6e63655103a02c436865636b5765696768745503a0604368617267655472616e73616374696f6e5061796d656e745903a05d03","id":"1"} \ No newline at end of file +Provided Host header is not whitelisted. diff --git a/package.json b/package.json index f2230fca..64a30fe5 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "dev": "vite --host", "lint": "eslint src --ext .ts,.tsx", + "lint:pretty": "tsc --noEmit --pretty", "build": "vite build", "preview": "vite preview --host", "typegen": "yarn get:testnet:metadata && yarn generate:defs && yarn generate:meta", @@ -20,53 +21,36 @@ "test": "jest" }, "dependencies": { - "@chakra-ui/react": "^2.4.5", - "@emotion/react": "^11", - "@emotion/styled": "^11", - "@ethersproject/bignumber": "^5.6.0", + "@chakra-ui/react": "^2.8.1", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", "@fontsource-variable/lexend": "^5.0.3", - "@graphql-codegen/cli": "^2.6.2", - "@graphql-codegen/typescript": "^2.4.11", - "@graphql-codegen/typescript-operations": "^2.4.0", - "@graphql-codegen/typescript-react-query": "^4.0.6", - "@polkadot/api": "^10.6.1", - "@polkadot/extension-dapp": "^0.46.2", - "@polkadot/keyring": "^12.1.2", - "@polkadot/networks": "^12.1.2", - "@polkadot/typegen": "^10.9.1", - "@polkadot/types": "^10.6.1", - "@polkadot/ui-keyring": "^3.3.1", - "@polkadot/ui-settings": "^3.3.1", - "@polkadot/util": "^12.1.2", - "@polkadot/util-crypto": "^12.1.2", + "@polkadot/react-identicon": "^3.6.3", + "@polkadot/api": "^9.4.2", + "@polkadot/typegen": "^9.4.2", + "@polkadot/types": "^9.4.2", "@reduxjs/toolkit": "^1.9.5", - "@rehooks/local-storage": "^2.4.4", "@tanstack/react-query": "^4.29.14", "@tanstack/react-query-devtools": "^4.29.15", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^14.0.0", - "@testing-library/react-hooks": "^8.0.1", - "@testing-library/user-event": "^14.4.3", "axios": "^1.1.2", "date-fns": "^2.30.0", "framer-motion": "^6.5.0", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "react": "^18.2.0", - "react-cropper": "^2.3.3", "react-dom": "^18.2.0", "react-hook-form": "^7.44.3", - "react-i18next": "^12.3.1", - "react-jazzicon": "^1.0.4", "react-json-view": "^1.21.3", "react-redux": "^8.1.1", "react-router-dom": "^6.13.0", - "swiper": "^9.4.1", "ts-jest": "^29.1.0", - "vite-tsconfig-paths": "^4.2.0", - "web3": "^4.0.1" + "vite-tsconfig-paths": "^4.2.0" }, "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^14.0.0", + "@testing-library/react-hooks": "^8.0.1", + "@testing-library/user-event": "^14.4.3", "@types/jest": "^29.5.2", "@types/node": "^20.2.6", "@types/react": "^18.2.11", @@ -84,7 +68,7 @@ "eslint-plugin-react-refresh": "^0.3.4", "prettier": "^2.8.8", "ts-node": "^10.9.1", - "typescript": "^5.1.6", + "typescript": "^5.2.2", "vite": "^4.3.9", "vite-plugin-svgr": "^3.2.0" }, diff --git a/src/App.tsx b/src/App.tsx index 25bf8d14..a2a8f5bb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,30 +1,6 @@ -import { Center, Heading, Spinner } from '@chakra-ui/react'; -import { connectAPI } from 'components/ConnectSubstrate/ConnectSubstrateUtils'; - -import { useAppDispatch, useAppSelector } from 'hooks/useRedux'; - import { RouterProvider } from 'react-router-dom'; import router from 'routes/routes'; export default function App() { - const dispatch = useAppDispatch(); - - const { apiState, socket, jsonrpc } = useAppSelector( - state => state.substrate - ); - - connectAPI({ socket, jsonrpc, apiState, dispatch }); - - if (apiState !== 'READY') { - return ( -
- - - Connecting to Substrate - -
- ); - } - return ; } diff --git a/src/components/Avatar/AvatarCollaborators.tsx b/src/components/Avatar/AvatarCollaborators.tsx index 66e3d5c1..f9f07b32 100644 --- a/src/components/Avatar/AvatarCollaborators.tsx +++ b/src/components/Avatar/AvatarCollaborators.tsx @@ -1,11 +1,11 @@ import { Box, Center, Flex, FlexProps, Text } from '@chakra-ui/react'; import AvatarJazzicon from './AvatarJazzicon'; -import ButtonCopy from 'components/ButtonCopy'; -import { ColorOfCollaborator, convertHex, shorten } from 'utils/utils'; +import { ColorOfCollaborator, convertHex, shorten } from 'utils'; import { TypeCollaboratorsRole } from 'layouts/Collaborators/CollaboratorsUtils'; import React from 'react'; +import Clipboard from 'components/Clipboard'; interface AvatarProfileProps { role: TypeCollaboratorsRole; @@ -17,10 +17,7 @@ interface AvatarProfileProps { export default ({ role, account, changeRole, sx }: AvatarProfileProps) => { return ( - + @@ -41,7 +38,7 @@ export default ({ role, account, changeRole, sx }: AvatarProfileProps) => { {shorten(account.address, 12)} - + diff --git a/src/components/Avatar/AvatarJazzicon.tsx b/src/components/Avatar/AvatarJazzicon.tsx index 33b4d7eb..26b38abd 100644 --- a/src/components/Avatar/AvatarJazzicon.tsx +++ b/src/components/Avatar/AvatarJazzicon.tsx @@ -1,32 +1,20 @@ -import { Box, BoxProps } from '@chakra-ui/react'; +import { Box } from '@chakra-ui/react'; +import Identicon from '@polkadot/react-identicon'; +import { IdentityProps } from '@polkadot/react-identicon/types'; -import { jsNumberForAddress } from 'react-jazzicon'; -import Jazzicon from 'react-jazzicon/dist/Jazzicon'; - -interface AvatarJazziconProps { - address: string; - sx?: BoxProps; -} - -export default function AvatarJazzicon({ address, sx }: AvatarJazziconProps) { +export default (props: IdentityProps) => { + /* + but you cannot using variable as chakra + Ex: borderRadius: "full" // cannot so should '100%' + */ return ( - - - + ); -} +}; diff --git a/src/components/Avatar/AvatarPopover.tsx b/src/components/Avatar/AvatarPopover.tsx index 9421f6ea..ac98f0b7 100644 --- a/src/components/Avatar/AvatarPopover.tsx +++ b/src/components/Avatar/AvatarPopover.tsx @@ -9,9 +9,10 @@ import { PopoverTrigger, Text, } from '@chakra-ui/react'; -import ButtonCopy from 'components/ButtonCopy'; -import { shorten } from 'utils/utils'; + +import { shorten } from 'utils'; import AvatarJazzicon from './AvatarJazzicon'; +import Clipboard from 'components/Clipboard'; interface AvatarPopoverProps extends React.PropsWithChildren { type: 'Owner' | 'Admin'; @@ -47,20 +48,18 @@ export default function AvatarPopover({ {type} - + {name} {shorten(address, 12)} - diff --git a/src/components/BackgroundUpload/index.tsx b/src/components/BackgroundUpload/index.tsx index 063569f5..9f8d6a4a 100644 --- a/src/components/BackgroundUpload/index.tsx +++ b/src/components/BackgroundUpload/index.tsx @@ -1,6 +1,6 @@ import { Box, BoxProps, Center, Icon, Input, Text } from '@chakra-ui/react'; import RatioPicture from 'components/RatioPicture'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import CloseIcon from 'public/assets/fill/close.svg'; import CameraIcon from 'public/assets/fill/camera.svg'; diff --git a/src/components/ButtonCopy/index.tsx b/src/components/ButtonCopy/index.tsx deleted file mode 100644 index 8c75033e..00000000 --- a/src/components/ButtonCopy/index.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { IconButton, IconButtonProps, useClipboard } from '@chakra-ui/react'; -import CopyIcon from 'public/assets/line/copy.svg'; -import DoneIcon from 'public/assets/fill/done.svg'; - -interface ButtonCopyProps { - value: string; - sx?: IconButtonProps; -} - -export default function ButtonCopy({ value, sx }: ButtonCopyProps) { - const { hasCopied, onCopy } = useClipboard(value); - - return ( - : } - {...sx} - /> - ); -} diff --git a/src/components/Clipboard/index.tsx b/src/components/Clipboard/index.tsx new file mode 100644 index 00000000..c76551c4 --- /dev/null +++ b/src/components/Clipboard/index.tsx @@ -0,0 +1,24 @@ +import { Icon, IconProps, useClipboard } from '@chakra-ui/react'; +import CopyIcon from 'public/assets/line/copy.svg'; +import DoneIcon from 'public/assets/fill/done.svg'; + +interface ClipBoardProps { + value: string; + sx?: IconProps; +} + +export default ({ value, sx }: ClipBoardProps) => { + const { hasCopied, onCopy } = useClipboard(value); + + return ( + + ); +}; diff --git a/src/components/ConnectSubstrate/ConnectSubstratePolkadot.tsx b/src/components/ConnectSubstrate/ConnectSubstratePolkadot.tsx deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/ConnectSubstrate/ConnectSubstrateUtils.ts b/src/components/ConnectSubstrate/ConnectSubstrateUtils.ts deleted file mode 100644 index 2ba7a933..00000000 --- a/src/components/ConnectSubstrate/ConnectSubstrateUtils.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { injectedExtension } from 'redux/injected'; -import { GAFI_WALLET_STORAGE_KEY } from 'utils/constants'; -import { getInjectedWeb3 } from 'utils/utils'; -import { - InjectedAccountWithMeta, - InjectedAccount, -} from '@polkadot/extension-inject/types'; -import { decodeAddress, encodeAddress } from '@polkadot/util-crypto'; -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { reduxSubstrateProps, substrateConnect } from 'redux/substrate'; -import { AppDispatch } from 'redux/store'; - -interface mapAccountsProps { - source: string; - list: InjectedAccount[]; - ss58Format?: number; -} - -interface loadAccountsProps { - extensionName: string; - dispatch: AppDispatch; -} - -interface connectAPIProps { - socket: reduxSubstrateProps['socket']; - jsonrpc: reduxSubstrateProps['jsonrpc']; - apiState: reduxSubstrateProps['apiState']; - dispatch: AppDispatch; -} - -const mapAccounts = ({ - source, - list, - ss58Format, -}: mapAccountsProps): InjectedAccountWithMeta[] => { - return list.map( - ({ address, genesisHash, name, type }): InjectedAccountWithMeta => ({ - address: - address.length === 42 - ? address - : encodeAddress(decodeAddress(address), ss58Format), - meta: { genesisHash, name, source: source }, - type, - }) - ); -}; - -const loadAccounts = async ({ extensionName, dispatch }: loadAccountsProps) => { - try { - const getKeyOfGAFI = localStorage.getItem(GAFI_WALLET_STORAGE_KEY); - - const accounts = await getInjectedWeb3(extensionName); - - const getAccounts = await accounts?.accounts.get(); - - if (getAccounts) { - if (!getAccounts.length) { - dispatch( - injectedExtension({ - keyringState: 'ERROR', - polkadot: {}, - }) - ); - } - - if (getAccounts.length) { - const mappedAccounts: InjectedAccountWithMeta[] = mapAccounts({ - source: extensionName, - list: getAccounts, // filter(({ type }) => type && true), - ss58Format: undefined, - }); - - dispatch( - injectedExtension({ - keyringState: 'READY', - polkadot: { - allAccount: mappedAccounts.map(({ address, type, meta }) => ({ - address, - ...meta, - type, - })), - }, - }) - ); - } - - if (!getKeyOfGAFI) { - localStorage.setItem(GAFI_WALLET_STORAGE_KEY, extensionName); - } - } - } catch (error) { - dispatch( - injectedExtension({ - keyringState: 'INSTALL', - polkadot: {}, - }) - ); - } -}; - -const connectAPI = async ({ - socket, - jsonrpc, - apiState, - dispatch, -}: connectAPIProps) => { - if (apiState) return; - - const provider = new WsProvider(socket); - const api = new ApiPromise({ provider, rpc: jsonrpc }); - - api.on('connected', () => { - api.isReady.then(() => - dispatch(substrateConnect({ apiState: 'READY', payload: api })) - ); - }); - - api.on('error', error => - dispatch(substrateConnect({ apiState: 'ERROR', payload: error })) - ); -}; - -export { mapAccounts, loadAccounts, connectAPI }; diff --git a/src/components/ConnectSubstrate/index.tsx b/src/components/ConnectSubstrate/index.tsx deleted file mode 100644 index d83c8f08..00000000 --- a/src/components/ConnectSubstrate/index.tsx +++ /dev/null @@ -1,199 +0,0 @@ -import { - Button, - ButtonGroup, - FormControl, - FormErrorMessage, - Icon, - Link, - Modal, - ModalBody, - ModalContent, - ModalFooter, - ModalHeader, - ModalOverlay, - Text, - useDisclosure, -} from '@chakra-ui/react'; -import { useAppDispatch, useAppSelector } from 'hooks/useRedux'; -import React from 'react'; - -import { - CHROME_EXT_URL, - FIREFOX_ADDON_URL, - GAFI_WALLET_ACCOUNT_KEY, - GAFI_WALLET_STORAGE_KEY, -} from 'utils/constants'; - -import PolkadotIcon from 'public/assets/wallet/polkadot-js.svg'; -import SubWalletIcon from 'public/assets/wallet/subwallet.svg'; -import CloverWallet from 'public/assets/wallet/clover.svg'; - -import { loadAccounts } from './ConnectSubstrateUtils'; -import { injectedAccount } from 'redux/injected'; -import { getInjectedWeb3 } from 'utils/utils'; - -export default function ConnectSubstrate() { - const extensionName = localStorage.getItem(GAFI_WALLET_STORAGE_KEY); - const accountName = localStorage.getItem(GAFI_WALLET_ACCOUNT_KEY); - - const pairsAccount = accountName?.includes('address') - ? JSON.parse(accountName) - : undefined; - - const { apiState } = useAppSelector(state => state.substrate); - const { keyringState } = useAppSelector(state => state.injected); - - const dispatch = useAppDispatch(); - const { isOpen, onOpen, onClose } = useDisclosure(); - - React.useEffect(() => { - // load all accounts extension - if (apiState === 'READY' && extensionName) { - loadAccounts({ extensionName, dispatch }); - } - - // parse pair account - if (pairsAccount) { - const { address, name } = pairsAccount; - - dispatch(injectedAccount({ polkadot: { account: { address, name } } })); - } - }, [apiState]); - - const wallets = [ - { - title: 'Polkadot Wallet', - icon: PolkadotIcon, - extensionName: 'polkadot-js', - onClick: async () => { - loadAccounts({ extensionName: 'polkadot-js', dispatch }); - - const injected = await getInjectedWeb3('polkadot-js'); - - const account = await injected?.accounts.get(); - - if (account) { - const address = account[0].address; - const name = account[0].name; - - localStorage.setItem( - GAFI_WALLET_ACCOUNT_KEY, - JSON.stringify({ address, name }) - ); - - dispatch( - injectedAccount({ polkadot: { account: { address, name } } }) - ); - } - }, - }, - { - title: 'SubWallet', - icon: SubWalletIcon, - extensionName: 'subwallet-js', - onClick: () => { - loadAccounts({ extensionName: 'subwallet-js', dispatch }); - }, - }, - { - title: 'CloverWallet', - icon: CloverWallet, - extensionName: 'clover', - onClick: () => { - loadAccounts({ extensionName: 'clover', dispatch }); - }, - }, - ]; - - return ( - <> - - - {isOpen && ( - - - - - Connect Wallet - - - - {React.Children.toArray( - wallets.map(button => ( - - )) - )} - - - {keyringState === 'ERROR' - ? 'not found wallet polkadot' - : 'please install extension'} - - - - - - - {!window.injectedWeb3 && ( - - Create an account with Polkadot-JS Extension ( - - Chrome - - ,  - - Firefox - - )  - - )} - - - - )} - - ); -} diff --git a/src/components/ConnectWallet/ConnectWalletModal.tsx b/src/components/ConnectWallet/ConnectWalletModal.tsx new file mode 100644 index 00000000..83c2bfe4 --- /dev/null +++ b/src/components/ConnectWallet/ConnectWalletModal.tsx @@ -0,0 +1,170 @@ +import { + Button, + Icon, + Link, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalHeader, + ModalOverlay, +} from '@chakra-ui/react'; + +import React, { useState } from 'react'; + +import PolkadotIcon from 'public/assets/wallet/polkadot-js.svg'; +import SubWalletIcon from 'public/assets/wallet/subwallet.svg'; +import CloverWallet from 'public/assets/wallet/clover.svg'; + +import { getInjectedWeb3 } from 'utils'; + +import { InjectedAccount } from 'types/polkadot.type'; +import { Signer } from '@polkadot/types/types'; +import { setCookie } from 'utils/utils.cookie'; +import { INJECTED_EXTENSION_CONNECTED } from 'utils/utils.injected'; + +interface ConnectWalletModalProps { + setAccount: (account: InjectedAccount) => void; + onClose: () => void; +} + +export default ({ setAccount, onClose }: ConnectWalletModalProps) => { + const [isError, setIsError] = useState(''); + + const [isLoading, setIsLoading] = useState(''); + + const ListWallet = [ + { + extension: 'polkadot-js', + name: 'polkadot{.js}', + icon: , + link: 'https://polkadot.js.org/extension/', + }, + { + name: 'SubWallet', + icon: , + link: 'https://metamask.io/download/', + }, + { + name: 'CloverWallet', + icon: , + link: 'https://www.coinbase.com/wallet/downloads', + }, + ]; + + const Login = async (account: string, signer: Signer) => { + console.log({ account, signer }); + + setIsLoading(undefined); + }; + + return ( + + + + + + Connect wallet + + + + + {React.Children.toArray( + ListWallet.map(meta => ( + + )) + )} + + {isError?.length ? ( + + Please install extension to use this feature (click here) + + ) : null} + + + + ); +}; diff --git a/src/components/ConnectWallet/ConnectWalletProfile.tsx b/src/components/ConnectWallet/ConnectWalletProfile.tsx new file mode 100644 index 00000000..83ed68c8 --- /dev/null +++ b/src/components/ConnectWallet/ConnectWalletProfile.tsx @@ -0,0 +1,127 @@ +import { + Box, + Button, + Center, + Flex, + Icon, + Popover, + PopoverBody, + PopoverContent, + PopoverTrigger, + Text, +} from '@chakra-ui/react'; +import AvatarJazzicon from 'components/Avatar/AvatarJazzicon'; +import Clipboard from 'components/Clipboard'; +import { colors } from 'theme/theme'; +import { InjectedAccount } from 'types/polkadot.type'; +import { convertHex, formatCurrency, shorten } from 'utils'; +import ConnectWalletSwitch from './ConnectWalletSwitch'; +import GafiTokenIcon from 'public/assets/token/gafi-token.svg'; +import useBalance from 'hooks/useBalance'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; +import useSignAndSend from 'hooks/useSignAndSend'; + +interface ConnectWalletProfileProps { + account: InjectedAccount; + accounts: InjectedAccount[]; +} + +export default ({ account, accounts }: ConnectWalletProfileProps) => { + const { api } = useSubstrateContext(); + + const { mutation, isLoading } = useSignAndSend({ + key: ['faucet', account.address], + address: account.address, + }); + + const { balance } = useBalance({ + account: account.address, + }); + + console.log(balance); + + return ( + + + + + + + +
+ + + + + + {account.name} + + + + + {shorten(account.address)} + + + + + + + + +
+ +
+ + + + + {balance}  + + GAFI + + + + + ({formatCurrency(Number(balance?.replaceAll(',', '')))}) + + +
+ + +
+
+
+ ); +}; diff --git a/src/components/ConnectWallet/ConnectWalletSwitch.tsx b/src/components/ConnectWallet/ConnectWalletSwitch.tsx index 5f904cb4..7d9347ab 100644 --- a/src/components/ConnectWallet/ConnectWalletSwitch.tsx +++ b/src/components/ConnectWallet/ConnectWalletSwitch.tsx @@ -10,16 +10,18 @@ import { Text, } from '@chakra-ui/react'; -import { GAFI_WALLET_ACCOUNT_KEY } from 'utils/constants'; -import { InjectedAccount } from '@polkadot/extension-inject/types'; -import { useDispatch } from 'react-redux'; -import { injectedAccount } from 'redux/injected'; import AvatarJazzicon from 'components/Avatar/AvatarJazzicon'; -import ButtonCopy from 'components/ButtonCopy'; -import { convertHex, shorten } from 'utils/utils'; + import Swap02Icon from 'public/assets/line/swap-02.svg'; import { colors } from 'theme/theme'; import UploadIcon from 'public/assets/line/upload.svg'; +import { InjectedAccount } from 'types/polkadot.type'; +import { convertHex, shorten } from 'utils'; +import { useAccountContext } from 'contexts/contexts.account'; +import Clipboard from 'components/Clipboard'; +import { deleteCookie } from 'utils/utils.cookie'; + +import { INJECTED_ACCOUNT_CONNECTED } from 'utils/utils.injected'; interface ConnectWalletSwitchProps { accounts: InjectedAccount[]; @@ -28,7 +30,7 @@ interface ConnectWalletSwitchProps { export default function ConnectWalletSwitch({ accounts, }: ConnectWalletSwitchProps) { - const dispatch = useDispatch(); + const { setAccount, setAccountContext } = useAccountContext(); return ( setAccount({ address, name })} > - { - localStorage.setItem( - GAFI_WALLET_ACCOUNT_KEY, - JSON.stringify({ address, name }) - ); + + + - dispatch( - injectedAccount({ - polkadot: { account: { address, name } }, - }) - ); - }} - > - - - + + + {name || 'unknown'} + - - - {name || 'unknown'} - + + {shorten(address, 6)} - - {shorten(address, 6)} - - - - - + + + ))} } onClick={() => { - dispatch(injectedAccount({ polkadot: { account: {} } })); - localStorage.removeItem(GAFI_WALLET_ACCOUNT_KEY); + deleteCookie(INJECTED_ACCOUNT_CONNECTED); + setAccountContext(prev => ({ all: prev.all })); }} > Log out diff --git a/src/components/ConnectWallet/index.tsx b/src/components/ConnectWallet/index.tsx index 311b29fa..d30bbca2 100644 --- a/src/components/ConnectWallet/index.tsx +++ b/src/components/ConnectWallet/index.tsx @@ -1,175 +1,41 @@ -import { - Box, - Button, - Center, - Flex, - Icon, - IconButton, - Menu, - MenuButton, - MenuItem, - MenuList, - Text, -} from '@chakra-ui/react'; - -import GafiTokenIcon from 'public/assets/token/gafi-token.svg'; - -import useSignAndSend from 'hooks/useSignAndSend'; - -import useBalance from 'hooks/useBalance'; - -import ConnectWalletSwitch from './ConnectWalletSwitch'; -import { useAppSelector } from 'hooks/useRedux'; - -import { convertHex, formatCurrency, shorten } from 'utils/utils'; - -import ConnectSubstrate from 'components/ConnectSubstrate'; -import AvatarJazzicon from 'components/Avatar/AvatarJazzicon'; -import ButtonCopy from 'components/ButtonCopy'; -import { colors } from 'theme/theme'; +import ConnectWalletModal from './ConnectWalletModal'; +import { useAccountContext } from 'contexts/contexts.account'; +import ConnectWalletProfile from './ConnectWalletProfile'; +import { Button, useDisclosure } from '@chakra-ui/react'; export default function ConnectWallet() { - const { api } = useAppSelector(state => state.substrate); - - const { account, allAccount } = useAppSelector( - state => state.injected.polkadot - ); + const { isOpen, onOpen, onClose } = useDisclosure(); - const { isLoading, mutation } = useSignAndSend({ - address: account?.address as string, - key: ['faucet'], - }); - - const { balance } = useBalance({ - account: account?.address as string, - }); + const { account, setAccount } = useAccountContext(); return ( <> - {allAccount && account && account.address ? ( - - figure': { - width: 'full', - height: 'full', - }, - }} - icon={} - /> - - -
- - - - - - - - {account?.name || 'unknown'} - - - - {shorten(account.address, 6)} - - - - - - - meta.address !== account.address - )} - /> -
- - {balance ? ( - - - - - - {balance}  - - GAFI - - - - - {formatCurrency(Number(balance.replaceAll(',', '')))} - - - - ) : null} - - - - -
-
-
+ {account.current?.address && account.all?.length ? ( + ) : ( - + + )} + + {isOpen && ( + )} ); diff --git a/src/components/DateBlock/index.tsx b/src/components/DateBlock/index.tsx index 97f410a5..c90f03d7 100644 --- a/src/components/DateBlock/index.tsx +++ b/src/components/DateBlock/index.tsx @@ -1,7 +1,7 @@ import { Text, TextProps } from '@chakra-ui/react'; import { secondsToHours, secondsToMinutes } from 'date-fns'; import useBlockTime from 'hooks/useBlockTime'; -import { BLOCK_TIME } from 'utils/constants'; +import { BLOCK_TIME } from 'utils/utils.contants'; interface DateBlockProps { endBlock: number; diff --git a/src/components/SelectMenu/index.tsx b/src/components/SelectMenu/index.tsx index 03fe1898..4f277445 100644 --- a/src/components/SelectMenu/index.tsx +++ b/src/components/SelectMenu/index.tsx @@ -7,7 +7,7 @@ import { MenuList, Text, } from '@chakra-ui/react'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import MenuIcon from 'public/assets/line/menu.svg'; import React from 'react'; diff --git a/src/config/config.ts b/src/config/config.ts index 3fe5832a..aa987589 100644 --- a/src/config/config.ts +++ b/src/config/config.ts @@ -10,9 +10,12 @@ const common: commonProps = { }; const development = { - PROVIDER_SOCKETS: ['ws://0.0.0.0:9944'], - // PROVIDER_SOCKETS: ['ws://192.168.1.19:9944'], - // PROVIDER_SOCKETS: ['ws://192.168.1.13:9944'], + // PROVIDER_SOCKETS: ['ws://0.0.0.0:9944'], + // PROVIDER_SOCKETS: ['wss://ws-testnet.gafi.network'], + PROVIDER_SOCKETS: [ + 'wss://ws-testnet.gafi.network', + 'wss://ws-test.gafi.network', + ], }; const production = { diff --git a/src/contexts/contexts.account/index.tsx b/src/contexts/contexts.account/index.tsx new file mode 100644 index 00000000..763f020d --- /dev/null +++ b/src/contexts/contexts.account/index.tsx @@ -0,0 +1,106 @@ +import { + Dispatch, + PropsWithChildren, + SetStateAction, + createContext, + useContext, + useEffect, + useState, +} from 'react'; + +import { InjectedAccount } from 'types/polkadot.type'; +import { getInjectedWeb3 } from 'utils'; +import { getCookie, setCookie } from 'utils/utils.cookie'; +import { INJECTED_ACCOUNT_CONNECTED } from 'utils/utils.injected'; + +export type AccountStateProps = { + current?: InjectedAccount; + all?: InjectedAccount[]; +}; + +interface AccountContextProps { + account: AccountStateProps; + setAccount: Dispatch>; +} + +const AccountContext = createContext({ + account: {}, + setAccount: () => {}, +}); + +const AccountContextProvider = ({ children }: PropsWithChildren) => { + const [account, setAccount] = useState({}); + + return ( + + {children} + + ); +}; + +const useAccountContext = () => { + const getAccount = getCookie(INJECTED_ACCOUNT_CONNECTED); + + const { account, setAccount: setAccountContext } = useContext(AccountContext); + + // currentAccount + useEffect(() => { + if (getAccount && !account.current?.address) { + const { address, name } = JSON.parse(getAccount); + + setAccount({ + address, + name, + }); + } + }, [getAccount]); + + useEffect(() => { + if (!account.all?.length) { + const response = async () => { + const injected = await getInjectedWeb3('polkadot-js'); + + if (injected?.accounts) { + const accounts = await injected.accounts.get(); + + setAccountContext(prev => ({ + ...prev, + all: accounts, + })); + } + }; + + response(); + } + }, []); + + const setAccount = (account: InjectedAccount) => { + const getDate = new Date(); + getDate.setFullYear(getDate.getFullYear() + 1); + + // update state + setAccountContext(prev => ({ ...prev, current: account })); + + // update cookie for account + setCookie({ + expires: `${getDate}`, + key: INJECTED_ACCOUNT_CONNECTED, + value: JSON.stringify({ address: account.address, name: account.name }), + }); + }; + + return { + account, + + // + setAccount, + setAccountContext, + }; +}; + +export { AccountContextProvider, useAccountContext }; diff --git a/src/contexts/contexts.substrate/index.tsx b/src/contexts/contexts.substrate/index.tsx new file mode 100644 index 00000000..065276c9 --- /dev/null +++ b/src/contexts/contexts.substrate/index.tsx @@ -0,0 +1,85 @@ +import { ApiPromise, WsProvider } from '@polkadot/api'; +import jsonrpc from '@polkadot/types/interfaces/jsonrpc'; + +import config from 'config'; +import { + PropsWithChildren, + createContext, + useContext, + useEffect, + useMemo, + useState, +} from 'react'; + +export interface SubstrateStateProps { + PROVIDER_SOCKET?: string; + api?: ApiPromise; +} + +export interface SubstrateContextProps { + substrate: SubstrateStateProps | undefined; + setSubstrate: React.Dispatch< + React.SetStateAction + >; +} + +const SubstrateContext = createContext({ + substrate: undefined, + setSubstrate: () => {}, +}); + +const SubstrateContextProvider = ({ children }: PropsWithChildren) => { + const [substrate, setSubstrate] = useState(); + + const provider = useMemo( + () => + new WsProvider( + substrate?.PROVIDER_SOCKET || config.PROVIDER_SOCKETS?.[0] + ), + [substrate?.PROVIDER_SOCKET] + ); + + const api = useMemo( + () => + new ApiPromise({ + provider, + rpc: jsonrpc, + }), + [provider] + ); + + useEffect(() => { + api.isReady.then(event => { + if (!substrate?.api) { + setSubstrate(prev => ({ + ...prev, + api: event, + })); + } + }); + }, []); + + return ( + + {children} + + ); +}; + +const useSubstrateContext = () => { + const { substrate, setSubstrate } = useContext(SubstrateContext); + + return { + api: substrate?.api, + PROVIDER_SOCKET: substrate?.PROVIDER_SOCKET, + + setSubstrate, + }; +}; + +export { SubstrateContextProvider, useSubstrateContext }; diff --git a/src/hooks/useBalance.ts b/src/hooks/useBalance.ts index 950b59cb..17b361ae 100644 --- a/src/hooks/useBalance.ts +++ b/src/hooks/useBalance.ts @@ -1,7 +1,8 @@ import React, { useState } from 'react'; -import { useAppSelector } from './useRedux'; -import { formatGAFI } from 'utils/utils'; + +import { formatGAFI } from 'utils'; import useSubscribeSystem from './useSubscribeSystem'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; type TypeGetBalance = { data: { @@ -14,15 +15,25 @@ interface useBalanceProps { } export default function useBalance({ account }: useBalanceProps) { + const { api } = useSubstrateContext(); const { event } = useSubscribeSystem('balances::Endowed'); const [balance, setBalance] = useState(); - const { api } = useAppSelector(state => state.substrate); React.useEffect(() => { const getBalance = () => { + if (event) { + event.forEach(({ eventValue }) => { + const [address] = JSON.parse(eventValue); + + if (address === account) { + getBalance(); + } + }); + } + const callback = async () => { - if (api && api.query.system && account) { + if (api?.query.system && account) { const res = await api.query.system.account(account); const getBalance = res.toPrimitive() as TypeGetBalance; @@ -34,20 +45,10 @@ export default function useBalance({ account }: useBalanceProps) { callback(); }; - if (event) { - event.forEach(({ eventValue }) => { - const [address] = JSON.parse(eventValue); - - if (address === account) { - getBalance(); - } - }); - } - getBalance(); return () => getBalance(); - }, [event, account]); + }, [event, account, api]); return { balance, diff --git a/src/hooks/useBlockTime.ts b/src/hooks/useBlockTime.ts index 370bc45f..402cef7e 100644 --- a/src/hooks/useBlockTime.ts +++ b/src/hooks/useBlockTime.ts @@ -1,17 +1,18 @@ +import { useSubstrateContext } from 'contexts/contexts.substrate'; import React from 'react'; -import { useAppSelector } from './useRedux'; export type TypeUseBlockTime = 'bestNumberFinalized' | 'bestNumber'; export default function useBlockTime(number: TypeUseBlockTime) { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const chainBlock = api?.derive.chain[number]; + const [blockNumber, setBlockNumber] = React.useState(0); React.useEffect(() => { const subscribe = () => { - if (chainBlock) { + if (chainBlock && api.isConnected) { chainBlock(number => setBlockNumber(number.toNumber())); } }; @@ -19,7 +20,7 @@ export default function useBlockTime(number: TypeUseBlockTime) { subscribe(); return () => subscribe(); - }, [blockNumber]); + }, [blockNumber, api]); return { blockNumber, diff --git a/src/hooks/useItemBalanceOf.ts b/src/hooks/useItemBalanceOf.ts index deb9845a..b0baf56a 100644 --- a/src/hooks/useItemBalanceOf.ts +++ b/src/hooks/useItemBalanceOf.ts @@ -1,8 +1,8 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; import { StorageKey, u32 } from '@polkadot/types'; import { AccountId32 } from '@polkadot/types/interfaces'; import { Codec } from '@polkadot/types/types'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; export interface ItemBalanceOfProps { owner: string; @@ -22,7 +22,7 @@ export default function useItemBalanceOf({ arg, key, }: useItemBalanceOfProps) { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data, isLoading } = useQuery({ queryKey: ['itemBalanceOf', key], @@ -31,16 +31,14 @@ export default function useItemBalanceOf({ if (filter === 'entries') { const service = await api.query.game.itemBalanceOf.entries(); - return service.map( - ([option, meta]: [StorageKey<[AccountId32, u32, u32]>, Codec]) => { - return { - owner: option.args[0].toString(), - collection_id: option.args[1].toNumber(), - nft_id: option.args[2].toNumber(), - amount: meta.toHuman() as string, - }; - } - ) as ItemBalanceOfProps[]; + return service.map(([option, meta]) => { + return { + owner: option.args[0].toString(), + collection_id: option.args[1].toNumber(), + nft_id: option.args[2].toNumber(), + amount: meta.toHuman() as string, + }; + }) as ItemBalanceOfProps[]; } if (filter === 'address' && arg) { diff --git a/src/hooks/useLootTableOf.ts b/src/hooks/useLootTableOf.ts index 348bc3ee..fd366c99 100644 --- a/src/hooks/useLootTableOf.ts +++ b/src/hooks/useLootTableOf.ts @@ -1,8 +1,8 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; import { GafiSupportGameTypesLoot } from '@polkadot/types/lookup'; import { Vec } from '@polkadot/types'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; export interface lootTableOfProps { weight: number; @@ -20,7 +20,7 @@ export default function useLootTableOf({ key, arg, }: useLootTableOfProps) { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data, isLoading, isError } = useQuery({ queryKey: ['lootTableOf', key], diff --git a/src/hooks/useMetaCollection.ts b/src/hooks/useMetaCollection.ts index a82d5e58..a0aba16a 100644 --- a/src/hooks/useMetaCollection.ts +++ b/src/hooks/useMetaCollection.ts @@ -1,10 +1,11 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; -import { TypeMetadataOfCollection } from 'types'; + import useSubscribeSystem from './useSubscribeSystem'; import { useEffect } from 'react'; import { Option, StorageKey, u32 } from '@polkadot/types'; import { PalletNftsCollectionMetadata } from '@polkadot/types/lookup'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; +import { TypeMetaCollection } from 'types/meta.type.ts'; export interface useMetaCollectionProps { filter: 'entries' | 'collection_id'; @@ -12,7 +13,7 @@ export interface useMetaCollectionProps { key: string | string[] | number | number[]; } -export interface MetaCollectionFieldProps extends TypeMetadataOfCollection { +export interface MetaCollectionFieldProps extends TypeMetaCollection { collection_id: number; } @@ -21,10 +22,9 @@ export default function useMetaCollection({ arg, key, }: useMetaCollectionProps) { + const { api } = useSubstrateContext(); const { event, setEvent } = useSubscribeSystem('nfts::CollectionMetadataSet'); - const { api } = useAppSelector(state => state.substrate); - const { data, isLoading, isError, refetch } = useQuery({ queryKey: [`collectionMetadataOf`, key], queryFn: async () => { @@ -39,7 +39,7 @@ export default function useMetaCollection({ ]) => { const metadata = JSON.parse( String(meta.value.data.toHuman()) - ) as TypeMetadataOfCollection; + ) as TypeMetaCollection; return { title: metadata.title || 'unknown', @@ -65,7 +65,7 @@ export default function useMetaCollection({ const metadata = JSON.parse( String(service.value.data.toHuman()) - ) as TypeMetadataOfCollection; + ) as TypeMetaCollection; return { title: metadata.title, diff --git a/src/hooks/useMetaGame.ts b/src/hooks/useMetaGame.ts index 4baeec8a..0b798466 100644 --- a/src/hooks/useMetaGame.ts +++ b/src/hooks/useMetaGame.ts @@ -1,8 +1,9 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; -import { TypeMetadataOfGame } from 'types'; + import { Option, StorageKey, u32 } from '@polkadot/types'; import { PalletNftsCollectionMetadata } from '@polkadot/types/lookup'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; +import { TypeMetaGame } from 'types/meta.type.ts'; export interface useMetaGameProps { filter: 'entries' | 'game_id'; @@ -10,12 +11,12 @@ export interface useMetaGameProps { key: string | string[] | number | number[]; } -interface MetaGameFieldProps extends TypeMetadataOfGame { +interface MetaGameFieldProps extends TypeMetaGame { game_id: number; } export default ({ filter, arg, key }: useMetaGameProps) => { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data, isLoading } = useQuery({ queryKey: [`gameMetadataOf`, key], @@ -31,7 +32,7 @@ export default ({ filter, arg, key }: useMetaGameProps) => { ]) => { const metadata = JSON.parse( String(meta.value.data.toHuman()) - ) as TypeMetadataOfGame; + ) as TypeMetaGame; return { title: metadata.title || 'unknown', @@ -58,7 +59,7 @@ export default ({ filter, arg, key }: useMetaGameProps) => { const metadata = JSON.parse( String(service.value.data.toHuman()) - ) as TypeMetadataOfGame; + ) as TypeMetaGame; return { title: metadata.title, diff --git a/src/hooks/useMetaNFT.ts b/src/hooks/useMetaNFT.ts index c35a2ad5..11a07888 100644 --- a/src/hooks/useMetaNFT.ts +++ b/src/hooks/useMetaNFT.ts @@ -1,10 +1,11 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; -import { TypeMetadataOfItem } from 'types'; + import { useEffect } from 'react'; import useSubscribeSystem from './useSubscribeSystem'; import { Option } from '@polkadot/types'; import { PalletNftsItemMetadata } from '@polkadot/types/lookup'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; +import { TypeMetaNFT } from 'types/meta.type.ts'; export interface useMetaNFTProps { filter: 'entries' | 'collection_id'; @@ -12,15 +13,15 @@ export interface useMetaNFTProps { key: string | string[] | number | number[]; } -interface MetaNFTFieldProps extends TypeMetadataOfItem { +interface MetaNFTFieldProps extends TypeMetaNFT { collection_id: number; nft_id: number; } export default function useMetaNFT({ filter, arg, key }: useMetaNFTProps) { - const { event, setEvent } = useSubscribeSystem('nfts::ItemMetadataSet'); + const { api } = useSubstrateContext(); - const { api } = useAppSelector(state => state.substrate); + const { event, setEvent } = useSubscribeSystem('nfts::ItemMetadataSet'); const { data, refetch } = useQuery({ queryKey: ['itemMetadataOf', key], @@ -34,7 +35,7 @@ export default function useMetaNFT({ filter, arg, key }: useMetaNFTProps) { const metadata = JSON.parse( String(meta.value.data.toHuman()) - ) as TypeMetadataOfItem; + ) as TypeMetaNFT; return { title: metadata.title, @@ -60,7 +61,7 @@ export default function useMetaNFT({ filter, arg, key }: useMetaNFTProps) { const metadata = JSON.parse( String(service.value.data.toHuman()) - ) as TypeMetadataOfItem; + ) as TypeMetaNFT; return { title: metadata.title || 'unknown', diff --git a/src/hooks/useMetaPool.ts b/src/hooks/useMetaPool.ts index 56c52d89..2aefe44f 100644 --- a/src/hooks/useMetaPool.ts +++ b/src/hooks/useMetaPool.ts @@ -1,6 +1,6 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; -import { TypeMetadataOfPool } from 'types'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; +import { TypeMetaPool } from 'types/meta.type.ts'; export interface useMetaPoolProps { filter: 'entries' | 'pool_id'; @@ -8,12 +8,12 @@ export interface useMetaPoolProps { key: string | string[] | number | number[]; } -interface MetaPoolFieldProps extends TypeMetadataOfPool { +interface MetaPoolFieldProps extends TypeMetaPool { pool_id: number; } export default ({ filter, arg, key }: useMetaPoolProps) => { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data } = useQuery({ queryKey: ['poolMetadataOf', key], @@ -29,7 +29,7 @@ export default ({ filter, arg, key }: useMetaPoolProps) => { const metadata = JSON.parse( String(service.value.data.toHuman()) - ) as TypeMetadataOfPool; + ) as TypeMetaPool; return { title: metadata.title || 'unknown', diff --git a/src/hooks/useNFTsItem.ts b/src/hooks/useNFTsItem.ts index 8d86abb8..357a0978 100644 --- a/src/hooks/useNFTsItem.ts +++ b/src/hooks/useNFTsItem.ts @@ -1,7 +1,7 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; import { Option, StorageKey, u32 } from '@polkadot/types'; import { PalletNftsItemDetails } from '@polkadot/types/lookup'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface useNFTsItemProps { filter?: 'entries' | 'collection_id' | 'nft_id'; @@ -10,7 +10,7 @@ interface useNFTsItemProps { } export default function useNFTsItem({ filter, key, arg }: useNFTsItemProps) { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data, isLoading, isError } = useQuery({ queryKey: ['nfts_item', key], diff --git a/src/hooks/usePoolOf.ts b/src/hooks/usePoolOf.ts index c56e5f9b..b886ca37 100644 --- a/src/hooks/usePoolOf.ts +++ b/src/hooks/usePoolOf.ts @@ -1,8 +1,8 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; import { Option, StorageKey, u32 } from '@polkadot/types'; import { PalletGamePoolDetails } from '@polkadot/types/lookup'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; export interface poolOfProps { pool_id: number; @@ -19,7 +19,7 @@ export interface usePoolOfProps { } export default ({ filter, arg, key }: usePoolOfProps) => { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data, isLoading } = useQuery({ queryKey: ['poolOf', key], diff --git a/src/hooks/useRedux.ts b/src/hooks/useRedux.ts deleted file mode 100644 index 979410f0..00000000 --- a/src/hooks/useRedux.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { useDispatch, useSelector } from 'react-redux'; -import type { TypedUseSelectorHook } from 'react-redux'; -import { AppDispatch, RootState } from 'redux/store'; - -// Use throughout your app instead of plain `useDispatch` and `useSelector` -export const useAppDispatch: () => AppDispatch = useDispatch; -export const useAppSelector: TypedUseSelectorHook = useSelector; diff --git a/src/hooks/useSignAndSend.ts b/src/hooks/useSignAndSend.ts index 2ee87967..4c7a1af3 100644 --- a/src/hooks/useSignAndSend.ts +++ b/src/hooks/useSignAndSend.ts @@ -1,12 +1,13 @@ import { useToast } from '@chakra-ui/react'; import { useMutation } from '@tanstack/react-query'; -import { getInjectedWeb3 } from 'utils/utils'; +import { getInjectedWeb3 } from 'utils'; import { SubmittableExtrinsic } from '@polkadot/api/types'; import { ISubmittableResult } from '@polkadot/types/types'; import useTxError from './useTxError'; import { useState } from 'react'; -import { GAFI_WALLET_STORAGE_KEY } from 'utils/constants'; +import { getCookie } from 'utils/utils.cookie'; +import { INJECTED_EXTENSION_CONNECTED } from 'utils/utils.injected'; interface useSignAndSendProps { address: string; @@ -21,8 +22,8 @@ export default function useSignAndSend({ onSuccess, onError, }: useSignAndSendProps) { - const extensionName = localStorage.getItem(GAFI_WALLET_STORAGE_KEY); const toast = useToast(); + const [isLoading, setIsLoading] = useState(false); const { txError } = useTxError({ @@ -49,7 +50,9 @@ export default function useSignAndSend({ ) => { setIsLoading(true); - const injected = await getInjectedWeb3(extensionName as string); + const injected = await getInjectedWeb3( + getCookie(INJECTED_EXTENSION_CONNECTED) as string + ); if (injected) { await parmas.signAndSend( diff --git a/src/hooks/useSubscribeSystem.ts b/src/hooks/useSubscribeSystem.ts index 47ea3952..2a6a34bc 100644 --- a/src/hooks/useSubscribeSystem.ts +++ b/src/hooks/useSubscribeSystem.ts @@ -1,6 +1,6 @@ import React from 'react'; -import { useAppSelector } from './useRedux'; import { FrameSystemEventRecord } from '@polkadot/types/lookup'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface StateEventProps { eventName: string; @@ -16,12 +16,13 @@ interface StateEventProps { - show everything */ export default function useSubscribeSystem(include?: string) { + const { api } = useSubstrateContext(); + const [event, setEvent] = React.useState([]); - const { api } = useAppSelector(state => state.substrate); React.useEffect(() => { const subscribe = () => { - if (api) { + if (api?.isConnected) { api.query.system.events(events => { events.forEach((record: FrameSystemEventRecord) => { const eventName = record.event.section + '::' + record.event.method; diff --git a/src/hooks/useSupplyOf.ts b/src/hooks/useSupplyOf.ts index a51265fa..7b52696c 100644 --- a/src/hooks/useSupplyOf.ts +++ b/src/hooks/useSupplyOf.ts @@ -1,7 +1,7 @@ import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from './useRedux'; import { StorageKey, u32 } from '@polkadot/types'; import { Codec } from '@polkadot/types/types'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; export interface SupplyOfProps { collection_id: number; @@ -16,7 +16,7 @@ interface useSupplyOfProps { } export default function useSupplyOf({ filter, key, arg }: useSupplyOfProps) { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data, isLoading, isError } = useQuery({ queryKey: ['supplyOf', key], diff --git a/src/hooks/useTxError.ts b/src/hooks/useTxError.ts index 6fa3ad1c..24b62182 100644 --- a/src/hooks/useTxError.ts +++ b/src/hooks/useTxError.ts @@ -1,7 +1,7 @@ import { useToast } from '@chakra-ui/react'; import { EventRecord } from '@polkadot/types/interfaces'; import { ISubmittableResult } from '@polkadot/types/types'; -import { useAppSelector } from './useRedux'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface useTxErrorProps { onSuccess: () => void; @@ -9,14 +9,14 @@ interface useTxErrorProps { } export default function useTxError({ onSuccess, onError }: useTxErrorProps) { + const { api } = useSubstrateContext(); + const toast = useToast({ position: 'top-right', isClosable: true, duration: 3000, }); - const { api } = useAppSelector(state => state.substrate); - const txError = (result: ISubmittableResult) => { const { status, events } = result; diff --git a/src/index.tsx b/src/index.tsx index 86e26db4..2893e328 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -2,19 +2,16 @@ import { ChakraProvider } from '@chakra-ui/react'; import * as ReactDOM from 'react-dom/client'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import 'swiper/css/bundle'; -import 'cropperjs/dist/cropper.css'; - import '@fontsource-variable/lexend'; import theme from 'theme/theme'; import { QueryClientProvider } from '@tanstack/react-query'; -import getQueryClient from 'utils/queryClient'; +import getQueryClient from 'utils/utils.queryClient'; import App from 'App'; -import { Provider } from 'react-redux'; -import { store } from 'redux/store'; +import { AccountContextProvider } from 'contexts/contexts.account'; +import { SubstrateContextProvider } from 'contexts/contexts.substrate'; const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement @@ -27,9 +24,11 @@ root.render( ) : null} - - - + + + + + ); diff --git a/src/interfaces/augment-types.ts b/src/interfaces/augment-types.ts index 9c622c93..5f786380 100644 --- a/src/interfaces/augment-types.ts +++ b/src/interfaces/augment-types.ts @@ -6,7 +6,7 @@ import '@polkadot/types/types/registry'; import type { Data, StorageKey } from '@polkadot/types'; -import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, ISize, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, isize, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; +import type { BitVec, Bool, Bytes, F32, F64, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, f32, f64, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec'; import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets'; import type { BlockAttestations, IncludedBlocks, MoreAttestations } from '@polkadot/types/interfaces/attestations'; import type { RawAuraPreDigest } from '@polkadot/types/interfaces/aura'; @@ -14,7 +14,7 @@ import type { ExtrinsicOrHash, ExtrinsicStatus } from '@polkadot/types/interface import type { UncleEntryItem } from '@polkadot/types/interfaces/authorship'; import type { AllowedSlots, BabeAuthorityWeight, BabeBlockWeight, BabeEpochConfiguration, BabeEquivocationProof, BabeGenesisConfiguration, BabeGenesisConfigurationV1, BabeWeight, Epoch, EpochAuthorship, MaybeRandomness, MaybeVrf, NextConfigDescriptor, NextConfigDescriptorV1, OpaqueKeyOwnershipProof, Randomness, RawBabePreDigest, RawBabePreDigestCompat, RawBabePreDigestPrimary, RawBabePreDigestPrimaryTo159, RawBabePreDigestSecondaryPlain, RawBabePreDigestSecondaryTo159, RawBabePreDigestSecondaryVRF, RawBabePreDigestTo159, SlotNumber, VrfData, VrfOutput, VrfProof } from '@polkadot/types/interfaces/babe'; import type { AccountData, BalanceLock, BalanceLockTo212, BalanceStatus, Reasons, ReserveData, ReserveIdentifier, VestingSchedule, WithdrawReasons } from '@polkadot/types/interfaces/balances'; -import type { BeefyAuthoritySet, BeefyCommitment, BeefyEquivocationProof, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, BeefyVoteMessage, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; +import type { BeefyAuthoritySet, BeefyCommitment, BeefyId, BeefyNextAuthoritySet, BeefyPayload, BeefyPayloadId, BeefySignedCommitment, MmrRootHash, ValidatorSet, ValidatorSetId } from '@polkadot/types/interfaces/beefy'; import type { BenchmarkBatch, BenchmarkConfig, BenchmarkList, BenchmarkMetadata, BenchmarkParameter, BenchmarkResult } from '@polkadot/types/interfaces/benchmark'; import type { CheckInherentsResult, InherentData, InherentIdentifier } from '@polkadot/types/interfaces/blockbuilder'; import type { BridgeMessageId, BridgedBlockHash, BridgedBlockNumber, BridgedHeader, CallOrigin, ChainId, DeliveredMessages, DispatchFeePayment, InboundLaneData, InboundRelayer, InitializationData, LaneId, MessageData, MessageKey, MessageNonce, MessagesDeliveryProofOf, MessagesProofOf, OperatingMode, OutboundLaneData, OutboundMessageFee, OutboundPayload, Parameter, RelayerId, UnrewardedRelayer, UnrewardedRelayersState } from '@polkadot/types/interfaces/bridges'; @@ -24,7 +24,7 @@ import type { StatementKind } from '@polkadot/types/interfaces/claims'; import type { CollectiveOrigin, MemberCount, ProposalIndex, Votes, VotesTo230 } from '@polkadot/types/interfaces/collective'; import type { AuthorityId, RawVRFOutput } from '@polkadot/types/interfaces/consensus'; import type { AliveContractInfo, CodeHash, CodeSource, CodeUploadRequest, CodeUploadResult, CodeUploadResultValue, ContractCallFlags, ContractCallRequest, ContractExecResult, ContractExecResultOk, ContractExecResultResult, ContractExecResultSuccessTo255, ContractExecResultSuccessTo260, ContractExecResultTo255, ContractExecResultTo260, ContractExecResultTo267, ContractExecResultU64, ContractInfo, ContractInstantiateResult, ContractInstantiateResultTo267, ContractInstantiateResultTo299, ContractInstantiateResultU64, ContractReturnFlags, ContractStorageKey, DeletedContract, ExecReturnValue, Gas, HostFnWeights, HostFnWeightsTo264, InstantiateRequest, InstantiateRequestV1, InstantiateRequestV2, InstantiateReturnValue, InstantiateReturnValueOk, InstantiateReturnValueTo267, InstructionWeights, Limits, LimitsTo264, PrefabWasmModule, RentProjection, Schedule, ScheduleTo212, ScheduleTo258, ScheduleTo264, SeedOf, StorageDeposit, TombstoneContractInfo, TrieId } from '@polkadot/types/interfaces/contracts'; -import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractConstructorSpecV4, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractContractSpecV4, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEnvironmentV4, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMessageSpecV3, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractMetadataV4, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi'; +import type { ContractConstructorSpecLatest, ContractConstructorSpecV0, ContractConstructorSpecV1, ContractConstructorSpecV2, ContractConstructorSpecV3, ContractContractSpecV0, ContractContractSpecV1, ContractContractSpecV2, ContractContractSpecV3, ContractContractSpecV4, ContractCryptoHasher, ContractDiscriminant, ContractDisplayName, ContractEventParamSpecLatest, ContractEventParamSpecV0, ContractEventParamSpecV2, ContractEventSpecLatest, ContractEventSpecV0, ContractEventSpecV1, ContractEventSpecV2, ContractLayoutArray, ContractLayoutCell, ContractLayoutEnum, ContractLayoutHash, ContractLayoutHashingStrategy, ContractLayoutKey, ContractLayoutStruct, ContractLayoutStructField, ContractMessageParamSpecLatest, ContractMessageParamSpecV0, ContractMessageParamSpecV2, ContractMessageSpecLatest, ContractMessageSpecV0, ContractMessageSpecV1, ContractMessageSpecV2, ContractMetadata, ContractMetadataLatest, ContractMetadataV0, ContractMetadataV1, ContractMetadataV2, ContractMetadataV3, ContractMetadataV4, ContractProject, ContractProjectContract, ContractProjectInfo, ContractProjectSource, ContractProjectV0, ContractSelector, ContractStorageLayout, ContractTypeSpec } from '@polkadot/types/interfaces/contractsAbi'; import type { FundIndex, FundInfo, LastContribution, TrieIndex } from '@polkadot/types/interfaces/crowdloan'; import type { CollationInfo, CollationInfoV1, ConfigData, MessageId, OverweightIndex, PageCounter, PageIndexData } from '@polkadot/types/interfaces/cumulus'; import type { AccountVote, AccountVoteSplit, AccountVoteStandard, Conviction, Delegations, PreimageStatus, PreimageStatusAvailable, PriorLock, PropIndex, Proposal, ProxyState, ReferendumIndex, ReferendumInfo, ReferendumInfoFinished, ReferendumInfoTo239, ReferendumStatus, Tally, Voting, VotingDelegating, VotingDirect, VotingDirectVote } from '@polkadot/types/interfaces/democracy'; @@ -34,20 +34,18 @@ import type { CreatedBlock, ImportedAux } from '@polkadot/types/interfaces/engin import type { BlockV0, BlockV1, BlockV2, EIP1559Transaction, EIP2930Transaction, EthAccessList, EthAccessListItem, EthAccount, EthAddress, EthBlock, EthBloom, EthCallRequest, EthFeeHistory, EthFilter, EthFilterAddress, EthFilterChanges, EthFilterTopic, EthFilterTopicEntry, EthFilterTopicInner, EthHeader, EthLog, EthReceipt, EthReceiptV0, EthReceiptV3, EthRichBlock, EthRichHeader, EthStorageProof, EthSubKind, EthSubParams, EthSubResult, EthSyncInfo, EthSyncStatus, EthTransaction, EthTransactionAction, EthTransactionCondition, EthTransactionRequest, EthTransactionSignature, EthTransactionStatus, EthWork, EthereumAccountId, EthereumAddress, EthereumLookupSource, EthereumSignature, LegacyTransaction, TransactionV0, TransactionV1, TransactionV2 } from '@polkadot/types/interfaces/eth'; import type { EvmAccount, EvmCallInfo, EvmCreateInfo, EvmLog, EvmVicinity, ExitError, ExitFatal, ExitReason, ExitRevert, ExitSucceed } from '@polkadot/types/interfaces/evm'; import type { AnySignature, EcdsaSignature, Ed25519Signature, Era, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV4, ExtrinsicSignature, ExtrinsicSignatureV4, ExtrinsicUnknown, ExtrinsicV4, ImmortalEra, MortalEra, MultiSignature, Signature, SignerPayload, Sr25519Signature } from '@polkadot/types/interfaces/extrinsics'; -import type { FungiblesAccessError } from '@polkadot/types/interfaces/fungibles'; import type { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset'; import type { ActiveGilt, ActiveGiltsTotal, ActiveIndex, GiltBid } from '@polkadot/types/interfaces/gilt'; import type { AuthorityIndex, AuthorityList, AuthoritySet, AuthoritySetChange, AuthoritySetChanges, AuthorityWeight, DelayKind, DelayKindBest, EncodedFinalityProofs, ForkTreePendingChange, ForkTreePendingChangeNode, GrandpaCommit, GrandpaEquivocation, GrandpaEquivocationProof, GrandpaEquivocationValue, GrandpaJustification, GrandpaPrecommit, GrandpaPrevote, GrandpaSignedPrecommit, JustificationNotification, KeyOwnerProof, NextAuthority, PendingChange, PendingPause, PendingResume, Precommits, Prevotes, ReportedRoundStates, RoundState, SetId, StoredPendingChange, StoredState } from '@polkadot/types/interfaces/grandpa'; import type { IdentityFields, IdentityInfo, IdentityInfoAdditional, IdentityInfoTo198, IdentityJudgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement, RegistrationTo198 } from '@polkadot/types/interfaces/identity'; import type { AuthIndex, AuthoritySignature, Heartbeat, HeartbeatTo244, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import type { CallIndex, LotteryConfig } from '@polkadot/types/interfaces/lottery'; -import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV15, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletMetadataV15, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, RuntimeApiMetadataLatest, RuntimeApiMetadataV15, RuntimeApiMethodMetadataV15, RuntimeApiMethodParamMetadataV15, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; -import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrHash, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; -import type { NftCollectionId, NftItemId } from '@polkadot/types/interfaces/nfts'; -import type { NpApiError, NpPoolId } from '@polkadot/types/interfaces/nompools'; +import type { ErrorMetadataLatest, ErrorMetadataV10, ErrorMetadataV11, ErrorMetadataV12, ErrorMetadataV13, ErrorMetadataV14, ErrorMetadataV9, EventMetadataLatest, EventMetadataV10, EventMetadataV11, EventMetadataV12, EventMetadataV13, EventMetadataV14, EventMetadataV9, ExtrinsicMetadataLatest, ExtrinsicMetadataV11, ExtrinsicMetadataV12, ExtrinsicMetadataV13, ExtrinsicMetadataV14, FunctionArgumentMetadataLatest, FunctionArgumentMetadataV10, FunctionArgumentMetadataV11, FunctionArgumentMetadataV12, FunctionArgumentMetadataV13, FunctionArgumentMetadataV14, FunctionArgumentMetadataV9, FunctionMetadataLatest, FunctionMetadataV10, FunctionMetadataV11, FunctionMetadataV12, FunctionMetadataV13, FunctionMetadataV14, FunctionMetadataV9, MetadataAll, MetadataLatest, MetadataV10, MetadataV11, MetadataV12, MetadataV13, MetadataV14, MetadataV9, ModuleConstantMetadataV10, ModuleConstantMetadataV11, ModuleConstantMetadataV12, ModuleConstantMetadataV13, ModuleConstantMetadataV9, ModuleMetadataV10, ModuleMetadataV11, ModuleMetadataV12, ModuleMetadataV13, ModuleMetadataV9, OpaqueMetadata, PalletCallMetadataLatest, PalletCallMetadataV14, PalletConstantMetadataLatest, PalletConstantMetadataV14, PalletErrorMetadataLatest, PalletErrorMetadataV14, PalletEventMetadataLatest, PalletEventMetadataV14, PalletMetadataLatest, PalletMetadataV14, PalletStorageMetadataLatest, PalletStorageMetadataV14, PortableType, PortableTypeV14, SignedExtensionMetadataLatest, SignedExtensionMetadataV14, StorageEntryMetadataLatest, StorageEntryMetadataV10, StorageEntryMetadataV11, StorageEntryMetadataV12, StorageEntryMetadataV13, StorageEntryMetadataV14, StorageEntryMetadataV9, StorageEntryModifierLatest, StorageEntryModifierV10, StorageEntryModifierV11, StorageEntryModifierV12, StorageEntryModifierV13, StorageEntryModifierV14, StorageEntryModifierV9, StorageEntryTypeLatest, StorageEntryTypeV10, StorageEntryTypeV11, StorageEntryTypeV12, StorageEntryTypeV13, StorageEntryTypeV14, StorageEntryTypeV9, StorageHasher, StorageHasherV10, StorageHasherV11, StorageHasherV12, StorageHasherV13, StorageHasherV14, StorageHasherV9, StorageMetadataV10, StorageMetadataV11, StorageMetadataV12, StorageMetadataV13, StorageMetadataV9 } from '@polkadot/types/interfaces/metadata'; +import type { MmrBatchProof, MmrEncodableOpaqueLeaf, MmrError, MmrLeafBatchProof, MmrLeafIndex, MmrLeafProof, MmrNodeIndex, MmrProof } from '@polkadot/types/interfaces/mmr'; +import type { NpApiError } from '@polkadot/types/interfaces/nompools'; import type { StorageKind } from '@polkadot/types/interfaces/offchain'; import type { DeferredOffenceOf, Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences'; -import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExecutorParam, ExecutorParams, ExecutorParamsHash, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, PvfExecTimeoutKind, PvfPrepTimeoutKind, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; +import type { AbridgedCandidateReceipt, AbridgedHostConfiguration, AbridgedHrmpChannel, AssignmentId, AssignmentKind, AttestedCandidate, AuctionIndex, AuthorityDiscoveryId, AvailabilityBitfield, AvailabilityBitfieldRecord, BackedCandidate, Bidder, BufferedSessionChange, CandidateCommitments, CandidateDescriptor, CandidateEvent, CandidateHash, CandidateInfo, CandidatePendingAvailability, CandidateReceipt, CollatorId, CollatorSignature, CommittedCandidateReceipt, CoreAssignment, CoreIndex, CoreOccupied, CoreState, DisputeLocation, DisputeResult, DisputeState, DisputeStatement, DisputeStatementSet, DoubleVoteReport, DownwardMessage, ExplicitDisputeStatement, GlobalValidationData, GlobalValidationSchedule, GroupIndex, GroupRotationInfo, HeadData, HostConfiguration, HrmpChannel, HrmpChannelId, HrmpOpenChannelRequest, InboundDownwardMessage, InboundHrmpMessage, InboundHrmpMessages, IncomingParachain, IncomingParachainDeploy, IncomingParachainFixed, InvalidDisputeStatementKind, LeasePeriod, LeasePeriodOf, LocalValidationData, MessageIngestionType, MessageQueueChain, MessagingStateSnapshot, MessagingStateSnapshotEgressEntry, MultiDisputeStatementSet, NewBidder, OccupiedCore, OccupiedCoreAssumption, OldV1SessionInfo, OutboundHrmpMessage, ParaGenesisArgs, ParaId, ParaInfo, ParaLifecycle, ParaPastCodeMeta, ParaScheduling, ParaValidatorIndex, ParachainDispatchOrigin, ParachainInherentData, ParachainProposal, ParachainsInherentData, ParathreadClaim, ParathreadClaimQueue, ParathreadEntry, PersistedValidationData, PvfCheckStatement, QueuedParathread, RegisteredParachainInfo, RelayBlockNumber, RelayChainBlockNumber, RelayChainHash, RelayHash, Remark, ReplacementTimes, Retriable, ScheduledCore, Scheduling, ScrapedOnChainVotes, ServiceQuality, SessionInfo, SessionInfoValidatorGroup, SignedAvailabilityBitfield, SignedAvailabilityBitfields, SigningContext, SlotRange, SlotRange10, Statement, SubId, SystemInherentData, TransientValidationData, UpgradeGoAhead, UpgradeRestriction, UpwardMessage, ValidDisputeStatementKind, ValidationCode, ValidationCodeHash, ValidationData, ValidationDataType, ValidationFunctionParams, ValidatorSignature, ValidityAttestation, VecInboundHrmpMessage, WinnersData, WinnersData10, WinnersDataTuple, WinnersDataTuple10, WinningData, WinningData10, WinningDataEntry } from '@polkadot/types/interfaces/parachains'; import type { FeeDetails, InclusionFee, RuntimeDispatchInfo, RuntimeDispatchInfoV1, RuntimeDispatchInfoV2 } from '@polkadot/types/interfaces/payment'; import type { Approvals } from '@polkadot/types/interfaces/poll'; import type { ProxyAnnouncement, ProxyDefinition, ProxyType } from '@polkadot/types/interfaces/proxy'; @@ -70,6 +68,8 @@ import type { ClassDetails, ClassId, ClassMetadata, DepositBalance, DepositBalan import type { Multisig, Timepoint } from '@polkadot/types/interfaces/utility'; import type { VestingInfo } from '@polkadot/types/interfaces/vesting'; import type { AssetInstance, AssetInstanceV0, AssetInstanceV1, AssetInstanceV2, BodyId, BodyPart, DoubleEncodedCall, Fungibility, FungibilityV0, FungibilityV1, FungibilityV2, InboundStatus, InstructionV2, InteriorMultiLocation, Junction, JunctionV0, JunctionV1, JunctionV2, Junctions, JunctionsV1, JunctionsV2, MultiAsset, MultiAssetFilter, MultiAssetFilterV1, MultiAssetFilterV2, MultiAssetV0, MultiAssetV1, MultiAssetV2, MultiAssets, MultiAssetsV1, MultiAssetsV2, MultiLocation, MultiLocationV0, MultiLocationV1, MultiLocationV2, NetworkId, OriginKindV0, OriginKindV1, OriginKindV2, OutboundStatus, Outcome, QueryId, QueryStatus, QueueConfigData, Response, ResponseV0, ResponseV1, ResponseV2, ResponseV2Error, ResponseV2Result, VersionMigrationStage, VersionedMultiAsset, VersionedMultiAssets, VersionedMultiLocation, VersionedResponse, VersionedXcm, WeightLimitV2, WildFungibility, WildFungibilityV0, WildFungibilityV1, WildFungibilityV2, WildMultiAsset, WildMultiAssetV1, WildMultiAssetV2, Xcm, XcmAssetId, XcmError, XcmErrorV0, XcmErrorV1, XcmErrorV2, XcmOrder, XcmOrderV0, XcmOrderV1, XcmOrderV2, XcmOrigin, XcmOriginKind, XcmV0, XcmV1, XcmV2, XcmVersion, XcmpMessageFormat } from '@polkadot/types/interfaces/xcm'; +import type { ProposalContents, ProposalRecord, ProposalTitle } from 'gafi-dashboard/interfaces/signaling'; +import type { Commitments, Reveals, TallyType, VoteData, VoteOutcome, VoteRecord, VoteStage, VoteType } from 'gafi-dashboard/interfaces/voting'; declare module '@polkadot/types/types/registry' { interface InterfaceTypes { @@ -152,14 +152,12 @@ declare module '@polkadot/types/types/registry' { BalanceStatus: BalanceStatus; BeefyAuthoritySet: BeefyAuthoritySet; BeefyCommitment: BeefyCommitment; - BeefyEquivocationProof: BeefyEquivocationProof; BeefyId: BeefyId; BeefyKey: BeefyKey; BeefyNextAuthoritySet: BeefyNextAuthoritySet; BeefyPayload: BeefyPayload; BeefyPayloadId: BeefyPayloadId; BeefySignedCommitment: BeefySignedCommitment; - BeefyVoteMessage: BeefyVoteMessage; BenchmarkBatch: BenchmarkBatch; BenchmarkConfig: BenchmarkConfig; BenchmarkList: BenchmarkList; @@ -234,6 +232,7 @@ declare module '@polkadot/types/types/registry' { CollatorId: CollatorId; CollatorSignature: CollatorSignature; CollectiveOrigin: CollectiveOrigin; + Commitments: Commitments; CommittedCandidateReceipt: CommittedCandidateReceipt; CompactAssignments: CompactAssignments; CompactAssignmentsTo257: CompactAssignmentsTo257; @@ -253,7 +252,6 @@ declare module '@polkadot/types/types/registry' { ContractConstructorSpecV1: ContractConstructorSpecV1; ContractConstructorSpecV2: ContractConstructorSpecV2; ContractConstructorSpecV3: ContractConstructorSpecV3; - ContractConstructorSpecV4: ContractConstructorSpecV4; ContractContractSpecV0: ContractContractSpecV0; ContractContractSpecV1: ContractContractSpecV1; ContractContractSpecV2: ContractContractSpecV2; @@ -262,7 +260,6 @@ declare module '@polkadot/types/types/registry' { ContractCryptoHasher: ContractCryptoHasher; ContractDiscriminant: ContractDiscriminant; ContractDisplayName: ContractDisplayName; - ContractEnvironmentV4: ContractEnvironmentV4; ContractEventParamSpecLatest: ContractEventParamSpecLatest; ContractEventParamSpecV0: ContractEventParamSpecV0; ContractEventParamSpecV2: ContractEventParamSpecV2; @@ -299,7 +296,6 @@ declare module '@polkadot/types/types/registry' { ContractMessageSpecV0: ContractMessageSpecV0; ContractMessageSpecV1: ContractMessageSpecV1; ContractMessageSpecV2: ContractMessageSpecV2; - ContractMessageSpecV3: ContractMessageSpecV3; ContractMetadata: ContractMetadata; ContractMetadataLatest: ContractMetadataLatest; ContractMetadataV0: ContractMetadataV0; @@ -445,9 +441,6 @@ declare module '@polkadot/types/types/registry' { EvmLog: EvmLog; EvmVicinity: EvmVicinity; ExecReturnValue: ExecReturnValue; - ExecutorParam: ExecutorParam; - ExecutorParams: ExecutorParams; - ExecutorParamsHash: ExecutorParamsHash; ExitError: ExitError; ExitFatal: ExitFatal; ExitReason: ExitReason; @@ -508,7 +501,6 @@ declare module '@polkadot/types/types/registry' { FungibilityV0: FungibilityV0; FungibilityV1: FungibilityV1; FungibilityV2: FungibilityV2; - FungiblesAccessError: FungiblesAccessError; Gas: Gas; GiltBid: GiltBid; GlobalValidationData: GlobalValidationData; @@ -596,8 +588,6 @@ declare module '@polkadot/types/types/registry' { InteriorMultiLocation: InteriorMultiLocation; InvalidDisputeStatementKind: InvalidDisputeStatementKind; InvalidTransaction: InvalidTransaction; - isize: isize; - ISize: ISize; Json: Json; Junction: Junction; Junctions: Junctions; @@ -651,13 +641,11 @@ declare module '@polkadot/types/types/registry' { MetadataV12: MetadataV12; MetadataV13: MetadataV13; MetadataV14: MetadataV14; - MetadataV15: MetadataV15; MetadataV9: MetadataV9; MigrationStatusResult: MigrationStatusResult; MmrBatchProof: MmrBatchProof; MmrEncodableOpaqueLeaf: MmrEncodableOpaqueLeaf; MmrError: MmrError; - MmrHash: MmrHash; MmrLeafBatchProof: MmrLeafBatchProof; MmrLeafIndex: MmrLeafIndex; MmrLeafProof: MmrLeafProof; @@ -707,15 +695,12 @@ declare module '@polkadot/types/types/registry' { NextAuthority: NextAuthority; NextConfigDescriptor: NextConfigDescriptor; NextConfigDescriptorV1: NextConfigDescriptorV1; - NftCollectionId: NftCollectionId; - NftItemId: NftItemId; NodeRole: NodeRole; Nominations: Nominations; NominatorIndex: NominatorIndex; NominatorIndexCompact: NominatorIndexCompact; NotConnectedPeer: NotConnectedPeer; NpApiError: NpApiError; - NpPoolId: NpPoolId; Null: Null; OccupiedCore: OccupiedCore; OccupiedCoreAssumption: OccupiedCoreAssumption; @@ -763,7 +748,6 @@ declare module '@polkadot/types/types/registry' { PalletId: PalletId; PalletMetadataLatest: PalletMetadataLatest; PalletMetadataV14: PalletMetadataV14; - PalletMetadataV15: PalletMetadataV15; PalletsOrigin: PalletsOrigin; PalletStorageMetadataLatest: PalletStorageMetadataLatest; PalletStorageMetadataV14: PalletStorageMetadataV14; @@ -823,14 +807,15 @@ declare module '@polkadot/types/types/registry' { PriorLock: PriorLock; PropIndex: PropIndex; Proposal: Proposal; + ProposalContents: ProposalContents; ProposalIndex: ProposalIndex; + ProposalRecord: ProposalRecord; + ProposalTitle: ProposalTitle; ProxyAnnouncement: ProxyAnnouncement; ProxyDefinition: ProxyDefinition; ProxyState: ProxyState; ProxyType: ProxyType; PvfCheckStatement: PvfCheckStatement; - PvfExecTimeoutKind: PvfExecTimeoutKind; - PvfPrepTimeoutKind: PvfPrepTimeoutKind; QueryId: QueryId; QueryStatus: QueryStatus; QueueConfigData: QueueConfigData; @@ -891,15 +876,12 @@ declare module '@polkadot/types/types/registry' { ResponseV2Error: ResponseV2Error; ResponseV2Result: ResponseV2Result; Retriable: Retriable; + Reveals: Reveals; RewardDestination: RewardDestination; RewardPoint: RewardPoint; RoundSnapshot: RoundSnapshot; RoundState: RoundState; RpcMethods: RpcMethods; - RuntimeApiMetadataLatest: RuntimeApiMetadataLatest; - RuntimeApiMetadataV15: RuntimeApiMetadataV15; - RuntimeApiMethodMetadataV15: RuntimeApiMethodMetadataV15; - RuntimeApiMethodParamMetadataV15: RuntimeApiMethodParamMetadataV15; RuntimeCall: RuntimeCall; RuntimeDbWeight: RuntimeDbWeight; RuntimeDispatchInfo: RuntimeDispatchInfo; @@ -1078,6 +1060,7 @@ declare module '@polkadot/types/types/registry' { SystemInherentData: SystemInherentData; SystemOrigin: SystemOrigin; Tally: Tally; + TallyType: TallyType; TaskAddress: TaskAddress; TAssetBalance: TAssetBalance; TAssetDepositBalance: TAssetDepositBalance; @@ -1160,12 +1143,17 @@ declare module '@polkadot/types/types/registry' { VestingInfo: VestingInfo; VestingSchedule: VestingSchedule; Vote: Vote; + VoteData: VoteData; VoteIndex: VoteIndex; + VoteOutcome: VoteOutcome; Voter: Voter; + VoteRecord: VoteRecord; VoterInfo: VoterInfo; Votes: Votes; + VoteStage: VoteStage; VotesTo230: VotesTo230; VoteThreshold: VoteThreshold; + VoteType: VoteType; VoteWeight: VoteWeight; Voting: Voting; VotingDelegating: VotingDelegating; diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts index 7f1de782..2d307291 100644 --- a/src/interfaces/index.ts +++ b/src/interfaces/index.ts @@ -1,4 +1,4 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ -export * from './types.js'; +export * from './types'; diff --git a/src/interfaces/pool/index.ts b/src/interfaces/pool/index.ts deleted file mode 100644 index fcb073fe..00000000 --- a/src/interfaces/pool/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './types'; diff --git a/src/interfaces/pool/types.ts b/src/interfaces/pool/types.ts deleted file mode 100644 index dadb06bb..00000000 --- a/src/interfaces/pool/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { GafiPrimitivesPoolService } from '@polkadot/types/lookup'; - -export interface PoolInfo { - basic: GafiPrimitivesPoolService; - medium: GafiPrimitivesPoolService; - advance: GafiPrimitivesPoolService; -} diff --git a/src/interfaces/types.ts b/src/interfaces/types.ts index dfecb1f8..692bd163 100644 --- a/src/interfaces/types.ts +++ b/src/interfaces/types.ts @@ -1,3 +1,5 @@ // Auto-generated via `yarn polkadot-types-from-defs`, do not edit /* eslint-disable */ +export * from './signaling/types'; +export * from './voting/types'; diff --git a/src/layouts/Collaborators/CollaboratorsAdd.tsx b/src/layouts/Collaborators/CollaboratorsAdd.tsx index 686cff4b..383df4c3 100644 --- a/src/layouts/Collaborators/CollaboratorsAdd.tsx +++ b/src/layouts/Collaborators/CollaboratorsAdd.tsx @@ -5,12 +5,13 @@ import { TypeCollaboratorsState, } from './CollaboratorsUtils'; import { Dispatch, SetStateAction } from 'react'; +import { InjectedAccount } from 'types/polkadot.type'; interface CollaboratorsAddProps { options: TypeCollaboratorsRole[]; collaborators: TypeCollaboratorsState; setCollaborators: Dispatch>; - account: { address: string; name: string }; + account: InjectedAccount; } export default ({ @@ -47,7 +48,13 @@ export default ({ if (!map_existed) { setCollaborators(prev => [ ...prev, - { role: options[i], account }, + { + role: options[i], + account: { + address: account.address, + name: account.name as string, + }, + }, ]); break; } diff --git a/src/layouts/Collaborators/CollaboratorsMenu.tsx b/src/layouts/Collaborators/CollaboratorsMenu.tsx index efde2d62..5910217d 100644 --- a/src/layouts/Collaborators/CollaboratorsMenu.tsx +++ b/src/layouts/Collaborators/CollaboratorsMenu.tsx @@ -12,14 +12,14 @@ import { } from '@chakra-ui/react'; import AvatarJazzicon from 'components/Avatar/AvatarJazzicon'; -import { useAppSelector } from 'hooks/useRedux'; import { Dispatch, SetStateAction, useState } from 'react'; -import { convertHex, shorten } from 'utils/utils'; +import { convertHex, shorten } from 'utils'; import AddIcon from 'public/assets/line/add.svg'; import JohnPopover from 'layouts/John/JohnPopover'; import { TypeCollaboratorsState } from './CollaboratorsUtils'; import UserIcon from 'public/assets/line/user.svg'; import { colors } from 'theme/theme'; +import { useAccountContext } from 'contexts/contexts.account'; interface CollaboratorsMenuProps { address: string; @@ -32,7 +32,10 @@ export default ({ address, setCollaborators, }: CollaboratorsMenuProps) => { + const { account } = useAccountContext(); + const toast = useToast(); + const { isOpen, onClose, onToggle } = useDisclosure(); const { isOpen: isError, @@ -40,8 +43,6 @@ export default ({ onClose: closeError, } = useDisclosure(); - const { allAccount } = useAppSelector(state => state.injected.polkadot); - const [text, setText] = useState(''); const onReset = () => { @@ -74,7 +75,7 @@ export default ({ return ( <> - {allAccount?.length ? ( + {account.all?.length ? ( <> 3 ? 72 : 'auto', + height: account.all.length > 3 ? 72 : 'auto', bg: 'shader.a.900', }, }, @@ -141,7 +142,7 @@ export default ({
- {allAccount + {account.all .filter(meta => meta.address !== address) .map(meta => ( - + {meta.name} diff --git a/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx b/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx index 0d62b3bb..547b3755 100644 --- a/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx +++ b/src/layouts/Collaborators/CollaboratorsRoleSwitch.tsx @@ -1,6 +1,6 @@ import { Text, useDisclosure } from '@chakra-ui/react'; import JohnPopover from 'layouts/John/JohnPopover'; -import { ColorOfCollaborator, convertHex } from 'utils/utils'; +import { ColorOfCollaborator, convertHex } from 'utils'; import { TypeCollaboratorsRole, TypeCollaboratorsState, diff --git a/src/layouts/Header/index.tsx b/src/layouts/Header/index.tsx index 2e42daf8..ba68be28 100644 --- a/src/layouts/Header/index.tsx +++ b/src/layouts/Header/index.tsx @@ -13,12 +13,12 @@ const ListHeader = [ }, { title: 'Blockchain', - link: 'https://gafi-market-fe-demo.web.app/blockchain/pools', + link: 'https://market.gafi.network/blockchain', target: '_blank', }, { title: 'Market Place', - link: 'https://gafi-market-fe-demo.web.app/', + link: 'https://market.gafi.network/', target: '_blank', }, ]; diff --git a/src/layouts/John/JohnPopover/index.tsx b/src/layouts/John/JohnPopover/index.tsx index cce3cfbc..5178b40d 100644 --- a/src/layouts/John/JohnPopover/index.tsx +++ b/src/layouts/John/JohnPopover/index.tsx @@ -12,7 +12,7 @@ import { import Chevron01Icon from 'public/assets/line/chevron-01.svg'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import { colors } from 'theme/theme'; import { PropsWithChildren, useRef } from 'react'; diff --git a/src/layouts/Owner/index.tsx b/src/layouts/Owner/index.tsx index 2b387e02..8bf7d54a 100644 --- a/src/layouts/Owner/index.tsx +++ b/src/layouts/Owner/index.tsx @@ -8,13 +8,14 @@ import { Text, } from '@chakra-ui/react'; import AvatarJazzicon from 'components/Avatar/AvatarJazzicon'; -import ButtonCopy from 'components/ButtonCopy'; -import { useAppSelector } from 'hooks/useRedux'; + import { colors } from 'theme/theme'; -import { convertHex, formatCurrency, shorten } from 'utils/utils'; +import { convertHex, formatCurrency, shorten } from 'utils'; import GafiTokenIcon from 'public/assets/token/gafi-token.svg'; import useBalance from 'hooks/useBalance'; +import { useAccountContext } from 'contexts/contexts.account'; +import Clipboard from 'components/Clipboard'; const ShieldIcon = () => ( @@ -26,14 +27,15 @@ const ShieldIcon = () => ( ); export default () => { - const { account } = useAppSelector(state => state.injected.polkadot); + const { account } = useAccountContext(); + const { balance } = useBalance({ - account: account?.address, + account: account.current?.address, }); return ( - {account?.address ? ( + {account.current?.address ? ( <> { borderBottom="0.0625rem solid" borderColor="shader.a.800" > - + - {account.name} + {account.current.name}
{ - {shorten(account.address, 12)}  - + {shorten(account.current.address, 12)}  + @@ -79,19 +78,23 @@ export default () => { > Balance - -
- + {balance ? ( + +
+ - - {balance} - -
+ + {balance} + +
- - {formatCurrency(Number(balance?.replaceAll(',', '')))} - -
+ + {formatCurrency(Number(balance?.replaceAll(',', '')))} + + + ) : ( + + )}
) : ( diff --git a/src/pages/Creator/Collections/CollectionAdmin/index.tsx b/src/pages/Creator/Collections/CollectionAdmin/index.tsx index 0ebaf5de..50408c53 100644 --- a/src/pages/Creator/Collections/CollectionAdmin/index.tsx +++ b/src/pages/Creator/Collections/CollectionAdmin/index.tsx @@ -1,6 +1,5 @@ import { Center, Icon, Stack } from '@chakra-ui/react'; import AvatarCollaborators from 'components/Avatar/AvatarCollaborators'; -import { useAppSelector } from 'hooks/useRedux'; import CollaboratorsMenu from 'layouts/Collaborators/CollaboratorsMenu'; import { TypeCollaboratorsRole, @@ -14,6 +13,8 @@ import CloseIcon from 'public/assets/fill/close.svg'; import CollaboratorsAdd from 'layouts/Collaborators/CollaboratorsAdd'; import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { CollectionsFieldProps } from '..'; +import { useAccountContext } from 'contexts/contexts.account'; +import { InjectedAccount } from 'types/polkadot.type'; interface CollectionAdminProps { setValue: UseFormSetValue; @@ -21,20 +22,17 @@ interface CollectionAdminProps { } interface CollectionAdminServiceProps extends CollectionAdminProps { - account: { - address: string; - name: string; - }; + account: InjectedAccount; } export default ({ setValue, watch }: CollectionAdminProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); + const { account } = useAccountContext(); return ( <> - {account?.address && account.name && ( + {account.current?.address && ( @@ -58,7 +56,15 @@ function CollectionAdminService({ // when reset form hook & initial value for 'collaborators' useEffect(() => { if (!watch_collaborator) { - setCollaborators([{ role: 'Admin', account }]); + setCollaborators([ + { + role: 'Admin', + account: { + address: account.address, + name: account.name as string, + }, + }, + ]); } }, [watch_collaborator]); diff --git a/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx b/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx index e95b4624..114100ac 100644 --- a/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx +++ b/src/pages/Creator/Collections/CollectionsJohnGame/CollectionJohnGameMenu.tsx @@ -1,7 +1,7 @@ import { Option, StorageKey, u32 } from '@polkadot/types'; import { PalletGameGameDetails } from '@polkadot/types/lookup'; import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from 'hooks/useRedux'; + import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { CollectionsFieldProps } from '..'; @@ -10,6 +10,7 @@ import JohnPopoverJSX from 'layouts/John/JohnPopover/JohnPopoverJSX'; import JohnPopoverEmpty from 'layouts/John/JohnPopover/JohnPopoverEmpty'; import { useDisclosure } from '@chakra-ui/react'; import useMetaGame from 'hooks/useMetaGame'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface CollectionJohnGamesMenuServiceProps extends Omit { @@ -22,7 +23,7 @@ interface CollectionsJohnGameMenuProps { } export default ({ setValue, address, watch }: CollectionsJohnGameMenuProps) => { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data } = useQuery({ queryKey: ['creator_collection_menu', address], diff --git a/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx b/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx index ec06a135..13171c4e 100644 --- a/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx +++ b/src/pages/Creator/Collections/CollectionsJohnGame/index.tsx @@ -1,11 +1,10 @@ import { Box, Flex, Text } from '@chakra-ui/react'; -import { useAppSelector } from 'hooks/useRedux'; - import CollectionJohnGameMenu from './CollectionJohnGameMenu'; import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { CollectionsFieldProps } from '..'; import John from 'layouts/John'; +import { useAccountContext } from 'contexts/contexts.account'; interface CollectionsJohnGameProps { setValue: UseFormSetValue; @@ -13,7 +12,8 @@ interface CollectionsJohnGameProps { } export default ({ setValue, watch }: CollectionsJohnGameProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); + const { account } = useAccountContext(); + const { general_join_game } = watch(); return ( @@ -40,10 +40,10 @@ export default ({ setValue, watch }: CollectionsJohnGameProps) => { )}
- {account?.address ? ( + {account.current?.address ? ( ) : null} diff --git a/src/pages/Creator/Collections/CollectionsModal/index.tsx b/src/pages/Creator/Collections/CollectionsModal/index.tsx index cefd288a..7289288e 100644 --- a/src/pages/Creator/Collections/CollectionsModal/index.tsx +++ b/src/pages/Creator/Collections/CollectionsModal/index.tsx @@ -12,15 +12,16 @@ import { Text, useDisclosure, } from '@chakra-ui/react'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import { colors } from 'theme/theme'; -import { useAppSelector } from 'hooks/useRedux'; import useSignAndSend from 'hooks/useSignAndSend'; import { TypeCollaboratorsRole } from 'layouts/Collaborators/CollaboratorsUtils'; import cloudinary_axios, { cloudinary_config, cloudinary_upload_type, } from 'axios/cloudinary_axios'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface CollectionsModalProps { isDisabled: boolean; @@ -33,6 +34,9 @@ export default ({ getValues, isDisabled, }: CollectionsModalProps) => { + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); + const { general_collection_title, general_description, @@ -45,12 +49,10 @@ export default ({ } = getValues(); const { isOpen, onClose, onOpen } = useDisclosure(); - const { api } = useAppSelector(state => state.substrate); - const { account } = useAppSelector(state => state.injected.polkadot); const { isLoading, setIsLoading, mutation } = useSignAndSend({ - key: [`create_collection`, account?.address as string], - address: account?.address as string, + key: [`create_collection`, account.current?.address as string], + address: account.current?.address as string, onSuccess() { onSuccess(); onClose(); diff --git a/src/pages/Creator/Collections/index.tsx b/src/pages/Creator/Collections/index.tsx index 88ead7e6..74d98bc6 100644 --- a/src/pages/Creator/Collections/index.tsx +++ b/src/pages/Creator/Collections/index.tsx @@ -19,9 +19,10 @@ import CollectionsGeneral from './CollectionsGeneral'; import CollectionsMedia from './CollectionsMedia'; import CollectionsModal from './CollectionsModal'; import Owner from 'layouts/Owner'; -import { TypeMetadataOfGame } from 'types'; + import CollectionAdmin from './CollectionAdmin'; import { TypeCollaboratorsState } from 'layouts/Collaborators/CollaboratorsUtils'; +import { TypeMetaGame } from 'types/meta.type.ts'; export interface CollectionsFieldProps { general_collection_title: string; @@ -29,7 +30,7 @@ export interface CollectionsFieldProps { general_external_url: string; general_join_game?: { game_id: number; - option?: TypeMetadataOfGame; + option?: TypeMetaGame; }; // role diff --git a/src/pages/Creator/Games/GamesCollaborator/index.tsx b/src/pages/Creator/Games/GamesCollaborator/index.tsx index 0406750e..aedc2ad0 100644 --- a/src/pages/Creator/Games/GamesCollaborator/index.tsx +++ b/src/pages/Creator/Games/GamesCollaborator/index.tsx @@ -1,6 +1,5 @@ import { Center } from '@chakra-ui/react'; import AvatarCollaborators from 'components/Avatar/AvatarCollaborators'; -import { useAppSelector } from 'hooks/useRedux'; import CollaboratorsMenu from 'layouts/Collaborators/CollaboratorsMenu'; import { useEffect, useState } from 'react'; @@ -8,6 +7,8 @@ import { useEffect, useState } from 'react'; import { TypeCollaboratorsState } from 'layouts/Collaborators/CollaboratorsUtils'; import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { GamesFieldProps } from '..'; +import { useAccountContext } from 'contexts/contexts.account'; +import { InjectedAccount } from 'types/polkadot.type'; interface GamesCollaboratorProps { setValue: UseFormSetValue; @@ -15,20 +16,17 @@ interface GamesCollaboratorProps { } interface GamesCollaboratorServiceProps extends GamesCollaboratorProps { - account: { - address: string; - name: string; - }; + account: InjectedAccount; } export default ({ setValue, watch }: GamesCollaboratorProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); + const { account } = useAccountContext(); return ( <> - {account?.address && account.name ? ( + {account.current?.address ? ( @@ -50,7 +48,15 @@ function GamesCollaboratorsService({ // when reset form hook & initial value for 'collaborators' useEffect(() => { if (!watch_collaborator) { - setCollaborators([{ role: 'Admin', account }]); + setCollaborators([ + { + role: 'Admin', + account: { + address: account.address, + name: account.name as string, + }, + }, + ]); } }, [watch_collaborator]); diff --git a/src/pages/Creator/Games/GamesModal/index.tsx b/src/pages/Creator/Games/GamesModal/index.tsx index 92950f35..260e0e7a 100644 --- a/src/pages/Creator/Games/GamesModal/index.tsx +++ b/src/pages/Creator/Games/GamesModal/index.tsx @@ -12,14 +12,16 @@ import { } from '@chakra-ui/react'; import { UseFormGetValues } from 'react-hook-form'; import { GamesFieldProps } from '..'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import { colors } from 'theme/theme'; -import { useAppSelector } from 'hooks/useRedux'; + import useSignAndSend from 'hooks/useSignAndSend'; import cloudinary_axios, { cloudinary_config, cloudinary_upload_type, } from 'axios/cloudinary_axios'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; +import { useAccountContext } from 'contexts/contexts.account'; interface GamesModalProps { isDisabled: boolean; @@ -28,6 +30,9 @@ interface GamesModalProps { } export default ({ onSuccess, getValues, isDisabled }: GamesModalProps) => { + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); + const { collaborator, general_categories, @@ -42,12 +47,10 @@ export default ({ onSuccess, getValues, isDisabled }: GamesModalProps) => { } = getValues(); const { isOpen, onClose, onOpen } = useDisclosure(); - const { api } = useAppSelector(state => state.substrate); - const { account } = useAppSelector(state => state.injected.polkadot); const { isLoading, setIsLoading, mutation } = useSignAndSend({ - key: [`create_collection`, account?.address as string], - address: account?.address as string, + key: [`create_collection`, account.current?.address as string], + address: account.current?.address as string, onSuccess() { onSuccess(); onClose(); diff --git a/src/pages/Creator/NFTs/NFTsAmount/index.tsx b/src/pages/Creator/NFTs/NFTsAmount/index.tsx index a2aeed04..4f366d8e 100644 --- a/src/pages/Creator/NFTs/NFTsAmount/index.tsx +++ b/src/pages/Creator/NFTs/NFTsAmount/index.tsx @@ -3,7 +3,7 @@ import ChakraBox from 'components/ChakraBox'; import { AnimatePresence } from 'framer-motion'; import { UseFormRegister, UseFormSetValue } from 'react-hook-form'; import { colors } from 'theme/theme'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import { NFTsFieldProps } from '..'; import { useEffect } from 'react'; import SwitchMode from 'components/SwitchMode'; diff --git a/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx b/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx index 3d68a797..ab61907f 100644 --- a/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx +++ b/src/pages/Creator/NFTs/NFTsJohnCollection/NFTsJohnCollectionMenu.tsx @@ -2,7 +2,6 @@ import { Option, StorageKey, u32 } from '@polkadot/types'; import { PalletNftsCollectionDetails } from '@polkadot/types/lookup'; import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from 'hooks/useRedux'; import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { NFTsFieldProps } from '..'; @@ -12,6 +11,7 @@ import JohnPopoverEmpty from 'layouts/John/JohnPopover/JohnPopoverEmpty'; import JohnPopoverJSX from 'layouts/John/JohnPopover/JohnPopoverJSX'; import { useDisclosure } from '@chakra-ui/react'; import useMetaCollection from 'hooks/useMetaCollection'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface NFTsJohnCollectionServiceProps extends Omit { @@ -25,7 +25,7 @@ interface NFTsJohnCollectionProps { } export default ({ setValue, watch, address }: NFTsJohnCollectionProps) => { - const { api } = useAppSelector(state => state.substrate); + const { api } = useSubstrateContext(); const { data } = useQuery({ queryKey: ['creator_create_nft_menu', address], diff --git a/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx b/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx index 8356965e..78609034 100644 --- a/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx +++ b/src/pages/Creator/NFTs/NFTsJohnCollection/index.tsx @@ -1,11 +1,10 @@ import { Box, Flex, Text } from '@chakra-ui/react'; -import { useAppSelector } from 'hooks/useRedux'; - import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { NFTsFieldProps } from '..'; import NFTsJohnCollectionMenu from './NFTsJohnCollectionMenu'; import John from 'layouts/John'; +import { useAccountContext } from 'contexts/contexts.account'; interface NFTsJohnCollectionProps { setValue: UseFormSetValue; @@ -13,7 +12,8 @@ interface NFTsJohnCollectionProps { } export default ({ setValue, watch }: NFTsJohnCollectionProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); + const { account } = useAccountContext(); + const { general_join_collection } = watch(); return ( @@ -37,10 +37,10 @@ export default ({ setValue, watch }: NFTsJohnCollectionProps) => { )}
- {account?.address ? ( + {account.current?.address ? ( ) : null} diff --git a/src/pages/Creator/NFTs/NFTsModal/index.tsx b/src/pages/Creator/NFTs/NFTsModal/index.tsx index a6fb9e3f..8745f86c 100644 --- a/src/pages/Creator/NFTs/NFTsModal/index.tsx +++ b/src/pages/Creator/NFTs/NFTsModal/index.tsx @@ -11,15 +11,16 @@ import { Text, useDisclosure, } from '@chakra-ui/react'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import { colors } from 'theme/theme'; import { NFTsFieldProps } from '..'; import useSignAndSend from 'hooks/useSignAndSend'; -import { useAppSelector } from 'hooks/useRedux'; import cloudinary_axios, { cloudinary_config, cloudinary_upload_type, } from 'axios/cloudinary_axios'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface CollectionsModalProps { isDisabled: boolean; @@ -32,6 +33,9 @@ export default ({ getValues, isDisabled, }: CollectionsModalProps) => { + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); + const { general_nft_id, general_amount, @@ -43,12 +47,10 @@ export default ({ } = getValues(); const { isOpen, onClose, onOpen } = useDisclosure(); - const { api } = useAppSelector(state => state.substrate); - const { account } = useAppSelector(state => state.injected.polkadot); const { isLoading, setIsLoading, mutation } = useSignAndSend({ - key: [`create_nft`, account?.address as string], - address: account?.address as string, + key: [`create_nft`, account.current?.address as string], + address: account.current?.address as string, onSuccess() { onSuccess(); onClose(); diff --git a/src/pages/Creator/NFTs/index.tsx b/src/pages/Creator/NFTs/index.tsx index cff3e961..7c5468b7 100644 --- a/src/pages/Creator/NFTs/index.tsx +++ b/src/pages/Creator/NFTs/index.tsx @@ -9,9 +9,10 @@ import GoBack from 'components/GoBack'; import DefaultForm from 'layouts/DefaultLayout/DefaultForm'; import Owner from 'layouts/Owner'; import NFTsGeneral from './NFTsGeneral'; -import { TypeMetadataOfCollection } from 'types'; + import NFTsMedia from './NFTsMedia'; import NFTsModal from './NFTsModal'; +import { TypeMetaCollection } from 'types/meta.type.ts'; export interface NFTsFieldProps { // general @@ -22,7 +23,7 @@ export interface NFTsFieldProps { general_external_url: string; general_join_collection: { collection_id: number; - option?: TypeMetadataOfCollection; + option?: TypeMetaCollection; }; // media diff --git a/src/pages/Creator/Pools/PoolsAdmin/index.tsx b/src/pages/Creator/Pools/PoolsAdmin/index.tsx index e2e5ed20..a31e0efb 100644 --- a/src/pages/Creator/Pools/PoolsAdmin/index.tsx +++ b/src/pages/Creator/Pools/PoolsAdmin/index.tsx @@ -1,6 +1,5 @@ import { Center } from '@chakra-ui/react'; import AvatarCollaborators from 'components/Avatar/AvatarCollaborators'; -import { useAppSelector } from 'hooks/useRedux'; import CollaboratorsMenu from 'layouts/Collaborators/CollaboratorsMenu'; import { useEffect, useState } from 'react'; @@ -8,51 +7,35 @@ import { useEffect, useState } from 'react'; import { TypeCollaboratorsState } from 'layouts/Collaborators/CollaboratorsUtils'; import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { PoolsFieldProps } from '..'; +import { useAccountContext } from 'contexts/contexts.account'; interface PoolsAdminProps { setValue: UseFormSetValue; watch: UseFormWatch; } -interface PoolsAdminServiceProps extends PoolsAdminProps { - account: { - address: string; - name: string; - }; -} - export default ({ setValue, watch }: PoolsAdminProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); - - return ( - <> - {account?.address && account.name ? ( - - ) : null} - - ); -}; + const { collaborator } = watch(); -function GamesCollaboratorsService({ - account, - setValue, - watch, -}: PoolsAdminServiceProps) { - const { collaborator: watch_collaborator } = watch(); const [collaborators, setCollaborators] = useState( [] ); + const { account } = useAccountContext(); // when reset form hook & initial value for 'collaborators' useEffect(() => { - if (!watch_collaborator) { - setCollaborators([{ role: 'Admin', account }]); + if (!collaborator && account.current) { + setCollaborators([ + { + role: 'Admin', + account: { + address: account.current.address, + name: account.current.name as string, + }, + }, + ]); } - }, [watch_collaborator]); + }, [collaborator, account.current]); useEffect(() => { setValue(`collaborator`, collaborators[0]); @@ -73,13 +56,15 @@ function GamesCollaboratorsService({ > - + {account.current?.address ? ( + + ) : null} ))} ); -} +}; diff --git a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx index f8bfbd21..abab4d4f 100644 --- a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx +++ b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/PoolsConfigModalCard.tsx @@ -1,7 +1,7 @@ import { Box, BoxProps, Center, Flex, Icon, Text } from '@chakra-ui/react'; import { cloundinary_link } from 'axios/cloudinary_axios'; import RatioPicture from 'components/RatioPicture'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import BlockIcon from 'public/assets/line/block.svg'; interface PoolsConfigModalCard { diff --git a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx index 669d9122..a45edd52 100644 --- a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx +++ b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigModal/index.tsx @@ -17,7 +17,7 @@ import { } from '@chakra-ui/react'; import RatioPicture from 'components/RatioPicture'; import { colors } from 'theme/theme'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import CloseIcon from 'public/assets/fill/close.svg'; import { PropsWithChildren } from 'react'; import SearchIcon from 'public/assets/line/search.svg'; diff --git a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx index be7175d6..299c5db0 100644 --- a/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx +++ b/src/pages/Creator/Pools/PoolsConfig/PoolsConfigSelect.tsx @@ -11,7 +11,7 @@ import { import { cloundinary_link } from 'axios/cloudinary_axios'; import RatioPicture from 'components/RatioPicture'; import { colors } from 'theme/theme'; -import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils/utils'; +import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils'; import { PoolsFieldProps } from '..'; import { UseFormRegister } from 'react-hook-form'; diff --git a/src/pages/Creator/Pools/PoolsDuration/index.tsx b/src/pages/Creator/Pools/PoolsDuration/index.tsx index da1d4791..42f2d7cc 100644 --- a/src/pages/Creator/Pools/PoolsDuration/index.tsx +++ b/src/pages/Creator/Pools/PoolsDuration/index.tsx @@ -3,7 +3,7 @@ import { PoolsFieldProps } from '..'; import { UseFormSetValue, UseFormWatch } from 'react-hook-form'; import { useEffect } from 'react'; import { Flex, Text, useDisclosure } from '@chakra-ui/react'; -import { BLOCK_TIME } from 'utils/constants'; +import { BLOCK_TIME } from 'utils/utils.contants'; interface PoolsDurationProps { setValue: UseFormSetValue; diff --git a/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx b/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx index f4f7b5be..0034ca9a 100644 --- a/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx +++ b/src/pages/Creator/Pools/PoolsDynamic/PoolsDynamicConfig.tsx @@ -5,13 +5,13 @@ import { } from 'react-hook-form'; import { PoolsFieldProps } from '..'; import { useDisclosure, useToast } from '@chakra-ui/react'; -import { useAppSelector } from 'hooks/useRedux'; import useItemBalanceOf from 'hooks/useItemBalanceOf'; import PoolsDynamic from '.'; import PoolsConfigEdit from '../PoolsConfig/PoolsConfigEdit'; import PoolsConfigSelect from '../PoolsConfig/PoolsConfigSelect'; import PoolsConfigState from '../PoolsConfig/PoolsConfigState'; import { useEffect } from 'react'; +import { useAccountContext } from 'contexts/contexts.account'; interface PoolsDynamicConfigProps { setValue: UseFormSetValue; @@ -20,15 +20,18 @@ interface PoolsDynamicConfigProps { } export default ({ setValue, watch, register }: PoolsDynamicConfigProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); + const { account } = useAccountContext(); + const { isOpen, onToggle, onClose } = useDisclosure(); + const { add_item_failed, add_item_dynamic } = watch(); + const toast = useToast(); const { itemBalanceOf } = useItemBalanceOf({ filter: 'address', - key: `creator_pools/${account?.address}`, - arg: [account?.address as string], + key: `creator_pools/${account.current?.address}`, + arg: [account.current?.address as string], }); const product = Object.values(add_item_dynamic || []).filter(meta => !!meta); diff --git a/src/pages/Creator/Pools/PoolsFailed/index.tsx b/src/pages/Creator/Pools/PoolsFailed/index.tsx index ce4bea03..c046b109 100644 --- a/src/pages/Creator/Pools/PoolsFailed/index.tsx +++ b/src/pages/Creator/Pools/PoolsFailed/index.tsx @@ -15,7 +15,7 @@ import { UseFormWatch, } from 'react-hook-form'; import { colors } from 'theme/theme'; -import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils/utils'; +import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils'; import { PoolsFieldProps } from '..'; import { useEffect } from 'react'; import SwitchMode from 'components/SwitchMode'; diff --git a/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx b/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx index 01a5fad2..5ef96a3d 100644 --- a/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx +++ b/src/pages/Creator/Pools/PoolsModal/PoolsModalCard.tsx @@ -5,7 +5,7 @@ import RatioPicture from 'components/RatioPicture'; import BlockIcon from 'public/assets/line/block.svg'; import EmptyIcon from 'public/assets/fill/empty.svg'; -import { ColorOfRarity, convertHex } from 'utils/utils'; +import { ColorOfRarity, convertHex } from 'utils'; interface PoolsModalCardProps { sx?: BoxProps; diff --git a/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx b/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx index 4973dfd7..4a2c0960 100644 --- a/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx +++ b/src/pages/Creator/Pools/PoolsModal/PoolsModalSubmit.tsx @@ -1,10 +1,11 @@ import { UseFormGetValues } from 'react-hook-form'; import { PoolsFieldProps } from '..'; import { Button } from '@chakra-ui/react'; -import { useAppSelector } from 'hooks/useRedux'; import useBlockTime from 'hooks/useBlockTime'; -import { unitGAFI } from 'utils/utils'; +import { unitGAFI } from 'utils'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface PoolsModalSubmitProps { get_value_type?: { @@ -24,8 +25,8 @@ export default ({ get_value_type, getValues, }: PoolsModalSubmitProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); - const { api } = useAppSelector(state => state.substrate); + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); const { general_title, @@ -46,7 +47,7 @@ export default ({ isLoading={isLoading} _hover={{}} onClick={() => { - if (account?.address && get_value_type?.length) { + if (account.current?.address && get_value_type?.length) { const start = general_duration?.time ? blockNumber : null; const end = general_duration?.time diff --git a/src/pages/Creator/Pools/PoolsModal/index.tsx b/src/pages/Creator/Pools/PoolsModal/index.tsx index 08e940cb..cb0730e2 100644 --- a/src/pages/Creator/Pools/PoolsModal/index.tsx +++ b/src/pages/Creator/Pools/PoolsModal/index.tsx @@ -14,19 +14,14 @@ import { } from '@chakra-ui/react'; import { UseFormGetValues } from 'react-hook-form'; import { colors } from 'theme/theme'; -import { - CalculatorOfRarity, - convertHex, - formatGAFI, - unitGAFI, -} from 'utils/utils'; +import { CalculatorOfRarity, convertHex, formatGAFI, unitGAFI } from 'utils'; import { PoolsFieldProps } from '..'; import PoolsModalCard from './PoolsModalCard'; import React from 'react'; import PoolsModalSubmit from './PoolsModalSubmit'; import useSignAndSend from 'hooks/useSignAndSend'; -import { useAppSelector } from 'hooks/useRedux'; +import { useAccountContext } from 'contexts/contexts.account'; interface PoolsModalProps { isDisabled: boolean; @@ -35,8 +30,9 @@ interface PoolsModalProps { } export default ({ onSuccess, getValues, isDisabled }: PoolsModalProps) => { + const { account } = useAccountContext(); + const { isOpen, onClose, onOpen } = useDisclosure(); - const { account } = useAppSelector(state => state.injected.polkadot); const { add_item_failed, @@ -77,7 +73,7 @@ export default ({ onSuccess, getValues, isDisabled }: PoolsModalProps) => { const { mutation, isLoading } = useSignAndSend({ key: [`creator_pool_create/${general_type}`], - address: account?.address as string, + address: account.current?.address as string, onSuccess() { onSuccess(); onClose(); diff --git a/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx b/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx index 81725666..67b24d83 100644 --- a/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx +++ b/src/pages/Creator/Pools/PoolsStable/PoolsStableConfig.tsx @@ -5,7 +5,7 @@ import { } from 'react-hook-form'; import { PoolsFieldProps } from '..'; import { useDisclosure, useToast } from '@chakra-ui/react'; -import { useAppSelector } from 'hooks/useRedux'; + import PoolsStable from '.'; import PoolsConfigEdit from '../PoolsConfig/PoolsConfigEdit'; import PoolsConfigSelect from '../PoolsConfig/PoolsConfigSelect'; @@ -14,6 +14,8 @@ import { useEffect } from 'react'; import { Option, u8 } from '@polkadot/types'; import { useQuery } from '@tanstack/react-query'; import { PalletNftsCollectionDetails } from '@polkadot/types/lookup'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface PoolsDynamicConfigProps { setValue: UseFormSetValue; @@ -22,23 +24,26 @@ interface PoolsDynamicConfigProps { } export default ({ setValue, watch, register }: PoolsDynamicConfigProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); - const { api } = useAppSelector(state => state.substrate); + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); + const { isOpen, onToggle, onClose } = useDisclosure(); + const { add_item_failed, add_item_stable } = watch(); + const toast = useToast(); const { data: supplyOf } = useQuery({ - queryKey: ['creator_create_pool', account?.address], + queryKey: ['creator_create_pool', account.current?.address], queryFn: async () => { - if (api && account?.address) { + if (api && account.current?.address) { const service = await api.query.game.supplyOf.entries(); return Promise.all( service.map(async ([{ args }, supply]) => { const getRole = (await api.query.nfts.collectionRoleOf( args[0].toNumber(), - account.address + account.current?.address )) as Option; const getOwner = ( @@ -48,7 +53,7 @@ export default ({ setValue, watch, register }: PoolsDynamicConfigProps) => { ).value.owner.toString(); if (!supply.toHuman()) { - if (getRole.isSome || getOwner === account.address) { + if (getRole.isSome || getOwner === account.current?.address) { return { collection_id: args[0].toNumber(), nft_id: args[1].toNumber(), diff --git a/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx b/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx index affa3eab..8f411c77 100644 --- a/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx +++ b/src/pages/Creator/Tabs/TabsCollection/TabsCollectionPanel.tsx @@ -12,36 +12,20 @@ import { import AvatarPopover from 'components/Avatar/AvatarPopover'; import RatioPicture from 'components/RatioPicture'; -import TabsEmptyData from '../TabsEmptyData'; + import useMetaCollection from 'hooks/useMetaCollection'; import { TabsCollectionDataProps } from '.'; import { cloundinary_link } from 'axios/cloudinary_axios'; -import { convertHex } from 'utils/utils'; +import { convertHex } from 'utils'; import { colors } from 'theme/theme'; import AvatarJazzicon from 'components/Avatar/AvatarJazzicon'; import useMetaGame from 'hooks/useMetaGame'; interface TabsCollectionPanelProps { - meta: TabsCollectionDataProps[] | undefined; + meta: TabsCollectionDataProps[]; } export default ({ meta }: TabsCollectionPanelProps) => { - return ( - <> - {meta?.length ? ( - - ) : ( - - )} - - ); -}; - -function TabsCollectionPanelService({ - meta, -}: { - meta: TabsCollectionDataProps[]; -}) { const { MetaCollection } = useMetaCollection({ key: `creator_tab_collection`, filter: 'collection_id', @@ -57,156 +41,146 @@ function TabsCollectionPanelService({ .flat(), }); - return ( - <> - {meta.map(({ collection_id, game, owner, role, items }) => { - const currentMetaCollection = MetaCollection?.find( - data => data?.collection_id === collection_id - ); - - return ( - - - { + const currentMetaCollection = MetaCollection?.find( + data => data?.collection_id === collection_id + ); + + return ( + + + + + + + + + + + + + + + + + + + {currentMetaCollection?.title || 'unknown'} + + + + ID:  + + {collection_id} + + + + +
+ + Joined games + + + + - - - - - - - - - - - - - - - - {currentMetaCollection?.title || 'unknown'} - - - - ID:  - - {collection_id} - - - - -
- - Joined games - - - - - + {game.length} games - - - {game.length ? ( - - - Joined games - - - {game.map(game_id => { - const currentMetaGame = MetaGame?.find( - meta => meta.game_id === game_id - ); - - return ( - - - - - - {currentMetaGame?.title || 'unknown'} - - - - ID: {game_id} - - - - ); - })} - - ) : null} - -
- -
- - {items} items - - - + + {game.length} games + + + {game.length ? ( + - Edit 2 weeks ago - -
-
- - ); - })} - - ); -} + + Joined games + + + {game.map(game_id => { + const currentMetaGame = MetaGame?.find( + meta => meta.game_id === game_id + ); + + return ( + + + + + + {currentMetaGame?.title || 'unknown'} + + + + ID: {game_id} + + + + ); + })} + + ) : null} +
+
+ +
+ + {items} items + + + + Edit 2 weeks ago + +
+
+
+ ); + }); +}; diff --git a/src/pages/Creator/Tabs/TabsCollection/index.tsx b/src/pages/Creator/Tabs/TabsCollection/index.tsx index e398cd71..6de18b38 100644 --- a/src/pages/Creator/Tabs/TabsCollection/index.tsx +++ b/src/pages/Creator/Tabs/TabsCollection/index.tsx @@ -2,7 +2,8 @@ import { Text } from '@chakra-ui/react'; import { Option, StorageKey, u32, u8 } from '@polkadot/types'; import { PalletNftsCollectionDetails } from '@polkadot/types/lookup'; import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from 'hooks/useRedux'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; import { CreatorLoadingProps } from 'pages/Creator'; import { useEffect } from 'react'; @@ -19,13 +20,13 @@ interface TabsCollectionProps { } export default ({ setLoading }: TabsCollectionProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); - const { api } = useAppSelector(state => state.substrate); + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); const { data, isLoading } = useQuery({ - queryKey: ['creator_tab_collection', account?.address], + queryKey: ['creator_tab_collection', account.current?.address], queryFn: async () => { - if (api && account?.address) { + if (api && account.current?.address) { const service = await api.query.nfts.collection.entries(); return Promise.all( @@ -39,11 +40,11 @@ export default ({ setLoading }: TabsCollectionProps) => { ); const getOwner = - option.value.owner.toString() === account.address; + option.value.owner.toString() === account.current?.address; const getRole = (await api.query.nfts.collectionRoleOf( collection_id.args[0].toNumber(), - account.address + account.current?.address )) as Option; if (getOwner || getRole.isSome) { @@ -51,7 +52,7 @@ export default ({ setLoading }: TabsCollectionProps) => { game: game.toJSON(), collection_id: collection_id.args[0].toNumber(), owner: option.value.owner.toString(), - role: account.address, + role: account.current?.address, items: option.value.items.toNumber(), } as TabsCollectionDataProps; } @@ -65,7 +66,7 @@ export default ({ setLoading }: TabsCollectionProps) => { // not found return []; }, - enabled: !!api?.query.nfts, + enabled: !!(account.current?.address && api?.query.nfts), }); useEffect(() => { diff --git a/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx b/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx index bb423078..4428a8e4 100644 --- a/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx +++ b/src/pages/Creator/Tabs/TabsGame/TabsGamePanel.tsx @@ -2,7 +2,6 @@ import { Box, Center, Flex, Stack, Text } from '@chakra-ui/react'; import RatioPicture from 'components/RatioPicture'; import SelectMenu from 'components/SelectMenu'; -import TabsEmptyData from '../TabsEmptyData'; import AvatarPopover from 'components/Avatar/AvatarPopover'; import { TabsGameDataProps } from '.'; @@ -11,18 +10,10 @@ import useMetaGame from 'hooks/useMetaGame'; import { cloundinary_link } from 'axios/cloudinary_axios'; interface TabsGamePanelProps { - meta: TabsGameDataProps[] | undefined; + meta: TabsGameDataProps[]; } export default ({ meta }: TabsGamePanelProps) => { - return ( - <> - {meta?.length ? : } - - ); -}; - -function TabsGamesPanelService({ meta }: { meta: TabsGameDataProps[] }) { const { MetaGame } = useMetaGame({ key: `creator_tab_game`, filter: 'game_id', @@ -44,75 +35,63 @@ function TabsGamesPanelService({ meta }: { meta: TabsGameDataProps[] }) { }, ]; - return ( - <> - {meta.map(({ collection, game_id, owner, role }) => { - const currentMetaGame = MetaGame?.find( - meta => meta.game_id === game_id - ); + return meta.map(({ collection, game_id, owner, role }) => { + const currentMetaGame = MetaGame?.find(meta => meta.game_id === game_id); - return ( - - - + return ( + + + - - - - + + + + - - - - + + + + - - + + - - - - {currentMetaGame?.title || 'unknown'} - + + + + {currentMetaGame?.title || 'unknown'} + - - ID:  - - {game_id} - - - + + ID:  + + {game_id} + + + -
- - {collection.length} collections - +
+ + {collection.length} collections + - - Open 4 days - -
- - - ); - })} - - ); -} + + Open 4 days + +
+
+
+ ); + }); +}; diff --git a/src/pages/Creator/Tabs/TabsGame/index.tsx b/src/pages/Creator/Tabs/TabsGame/index.tsx index 8e41fca0..5f7f8cb7 100644 --- a/src/pages/Creator/Tabs/TabsGame/index.tsx +++ b/src/pages/Creator/Tabs/TabsGame/index.tsx @@ -2,8 +2,9 @@ import { Text } from '@chakra-ui/react'; import { Option, StorageKey, u32 } from '@polkadot/types'; import { PalletGameGameDetails } from '@polkadot/types/lookup'; import { useQuery } from '@tanstack/react-query'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; -import { useAppSelector } from 'hooks/useRedux'; import { CreatorLoadingProps } from 'pages/Creator'; import { useEffect } from 'react'; @@ -20,13 +21,13 @@ interface TabsGameProps { } export default ({ setLoading }: TabsGameProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); - const { api } = useAppSelector(state => state.substrate); + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); const { data, isLoading } = useQuery({ - queryKey: ['creator_tab_game', account?.address], + queryKey: ['creator_tab_game', account.current?.address], queryFn: async () => { - if (api && account?.address) { + if (api && account.current?.address) { const service = await api.query.game.game.entries(); return Promise.all( @@ -40,9 +41,10 @@ export default ({ setLoading }: TabsGameProps) => { ); const getOwner = - option.value.owner.toString() === account.address; + option.value.owner.toString() === account.current?.address; - const getRole = option.value.admin.toString() === account.address; + const getRole = + option.value.admin.toString() === account.current?.address; if (getOwner || getRole) { return { @@ -62,7 +64,7 @@ export default ({ setLoading }: TabsGameProps) => { // not found return []; }, - enabled: !!api?.query.game, + enabled: !!(account.current?.address && api?.query.game), }); useEffect(() => { diff --git a/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx b/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx index 96c33242..dce4d179 100644 --- a/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx +++ b/src/pages/Creator/Tabs/TabsNFT/TabsNFTPanel.tsx @@ -1,6 +1,6 @@ import useMetaCollection from 'hooks/useMetaCollection'; import { TabsNFTDataProps } from '.'; -import TabsEmptyData from '../TabsEmptyData'; + import useMetaNFT from 'hooks/useMetaNFT'; import useItemBalanceOf from 'hooks/useItemBalanceOf'; import { Box, Center, Flex, Stack, Text } from '@chakra-ui/react'; @@ -8,18 +8,10 @@ import RatioPicture from 'components/RatioPicture'; import { cloundinary_link } from 'axios/cloudinary_axios'; interface TabsNFTPanelProps { - meta?: TabsNFTDataProps[] | undefined; + meta: TabsNFTDataProps[]; } export default ({ meta }: TabsNFTPanelProps) => { - return ( - <> - {meta?.length ? : } - - ); -}; - -function TabsNFTPanelService({ meta }: { meta: TabsNFTDataProps[] }) { const { MetaCollection } = useMetaCollection({ key: `creator_tab_nft`, filter: 'collection_id', @@ -41,69 +33,63 @@ function TabsNFTPanelService({ meta }: { meta: TabsNFTDataProps[] }) { arg: meta.map(({ owner }) => owner), }); - return ( - <> - {meta.map(({ collection_id, nft_id, infinity }) => { - const currentMetaCollection = MetaCollection?.find( - meta => meta?.collection_id === collection_id - ); + return meta.map(({ collection_id, nft_id, infinity }) => { + const currentMetaCollection = MetaCollection?.find( + meta => meta?.collection_id === collection_id + ); - const currentMetaNFT = metaNFT?.find( - meta => - meta?.collection_id === collection_id && meta?.nft_id === nft_id - ); + const currentMetaNFT = metaNFT?.find( + meta => meta?.collection_id === collection_id && meta?.nft_id === nft_id + ); - const currentItemOfBalance = itemBalanceOf?.find( - meta => - meta?.collection_id === collection_id && meta?.nft_id === nft_id - ); + const currentItemOfBalance = itemBalanceOf?.find( + meta => meta?.collection_id === collection_id && meta?.nft_id === nft_id + ); - return ( - - + return ( + + - - - {currentMetaCollection?.title || 'unknown'} - + + + {currentMetaCollection?.title || 'unknown'} + - - - {currentMetaNFT?.title || 'unknown'} - + + + {currentMetaNFT?.title || 'unknown'} + - - ID:  - - {nft_id} - - - + + ID:  + + {nft_id} + + + -
- - {infinity ? 'Infinity' : 'x' + currentItemOfBalance?.amount} - +
+ + {infinity ? 'Infinity' : 'x' + currentItemOfBalance?.amount} + - - Edit 43m ago - -
- - - ); - })} - - ); -} + + Edit 43m ago + +
+
+
+ ); + }); +}; diff --git a/src/pages/Creator/Tabs/TabsNFT/index.tsx b/src/pages/Creator/Tabs/TabsNFT/index.tsx index 8e7e5e7d..29067363 100644 --- a/src/pages/Creator/Tabs/TabsNFT/index.tsx +++ b/src/pages/Creator/Tabs/TabsNFT/index.tsx @@ -3,7 +3,9 @@ import { Option } from '@polkadot/types'; import { PalletNftsItemDetails } from '@polkadot/types/lookup'; import { isNull } from '@polkadot/util'; import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from 'hooks/useRedux'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; + import { CreatorLoadingProps } from 'pages/Creator'; import { useEffect } from 'react'; @@ -19,13 +21,13 @@ interface TabsCollectionProps { } export default ({ setLoading }: TabsCollectionProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); - const { api } = useAppSelector(state => state.substrate); + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); const { data, isLoading } = useQuery({ - queryKey: ['creator_tab_nft', account?.address], + queryKey: ['creator_tab_nft', account.current?.address], queryFn: async () => { - if (api && account?.address) { + if (api && account.current?.address) { const service = await api.query.nfts.item.entries(); return Promise.all( @@ -41,11 +43,12 @@ export default ({ setLoading }: TabsCollectionProps) => { nft_id.args[0].toNumber() ); - const getOwner = option.value.owner.toString() === account.address; + const getOwner = + option.value.owner.toString() === account.current?.address; if ( getOwner || - getRole[0][0].args[1].toString() === account.address + getRole[0][0].args[1].toString() === account.current?.address ) { return { collection_id: nft_id.args[0].toNumber(), @@ -63,7 +66,7 @@ export default ({ setLoading }: TabsCollectionProps) => { // not found return []; }, - enabled: !!api?.query.nfts, + enabled: !!(account.current?.address && api?.query.nfts), }); useEffect(() => { diff --git a/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx b/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx index 234379f0..c62615a0 100644 --- a/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx +++ b/src/pages/Creator/Tabs/TabsPool/TabsPoolPanel.tsx @@ -15,7 +15,7 @@ import { TabsPoolDataProps } from '.'; import RatioPicture from 'components/RatioPicture'; import AvatarPopover from 'components/Avatar/AvatarPopover'; import AvatarJazzicon from 'components/Avatar/AvatarJazzicon'; -import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils/utils'; +import { CalculatorOfRarity, ColorOfRarity, convertHex } from 'utils'; import DateBlock from 'components/DateBlock'; import { colors } from 'theme/theme'; @@ -28,14 +28,10 @@ import { isNull } from '@polkadot/util'; import useMetaPool from 'hooks/useMetaPool'; interface TabsNFTPanelProps { - meta?: TabsPoolDataProps[] | undefined; + meta: TabsPoolDataProps[]; } export default ({ meta }: TabsNFTPanelProps) => { - return <>{meta?.length ? : null}; -}; - -function TabsPoolPanelService({ meta }: { meta: TabsPoolDataProps[] }) { const loot_table = meta .map(meta => meta.lootOfTable.map(meta => meta)) .flat(); @@ -57,277 +53,260 @@ function TabsPoolPanelService({ meta }: { meta: TabsPoolDataProps[] }) { arg: meta.map(({ pool_id }) => pool_id), }); - return ( - <> - {meta.map( - ({ admin, owner, endBlock, pool_id, lootOfTable, supplyOf }) => { - const currentMetaNFT = metaNFT?.find(({ collection_id, nft_id }) => - lootOfTable.some(({ maybeNft }) => { - if (maybeNft.isSome) { - return ( - maybeNft.value.collection.toNumber() === collection_id && - maybeNft.value.item.toNumber() === nft_id - ); - } - }) - ); + return meta.map( + ({ admin, owner, endBlock, pool_id, lootOfTable, supplyOf }) => { + const currentMetaNFT = metaNFT?.find(({ collection_id, nft_id }) => + lootOfTable.some(({ maybeNft }) => { + if (maybeNft.isSome) { + return ( + maybeNft.value.collection.toNumber() === collection_id && + maybeNft.value.item.toNumber() === nft_id + ); + } + }) + ); - const currentMetaPool = MetaPool?.find( - meta => meta.pool_id === pool_id - ); + const currentMetaPool = MetaPool?.find(meta => meta.pool_id === pool_id); - return ( - - - + return ( + + + - - - - + + + + - - - - - + + + +
+
- - - - {currentMetaPool?.title || 'unknown'} - + + + + {currentMetaPool?.title || 'unknown'} + - - ID:  - - {pool_id} - - - + + ID:  + + {pool_id} + + + -
- - Supply - +
+ + Supply + - - - + {lootOfTable.length} items - + + + + {lootOfTable.length} items + - {lootOfTable.length ? ( - - - Pool detail - + {lootOfTable.length ? ( + + + Pool detail + - {React.Children.toArray( - lootOfTable.map(({ maybeNft, weight }, index) => { - const getWeight = CalculatorOfRarity( - weight.toNumber(), - lootOfTable.map(meta => meta.weight.toNumber()) - ); + {React.Children.toArray( + lootOfTable.map(({ maybeNft, weight }, index) => { + const getWeight = CalculatorOfRarity( + weight.toNumber(), + lootOfTable.map(meta => meta.weight.toNumber()) + ); - const currentMetaNFTChild = metaNFT?.find( - ({ collection_id, nft_id }) => - collection_id === - maybeNft.value.collection?.toNumber() && - nft_id === maybeNft.value.item?.toNumber() - ); + const currentMetaNFTChild = metaNFT?.find( + ({ collection_id, nft_id }) => + collection_id === + maybeNft.value.collection?.toNumber() && + nft_id === maybeNft.value.item?.toNumber() + ); - const isInfinity = isNull(supplyOf[index]); + const isInfinity = isNull(supplyOf[index]); - return ( - - {maybeNft.isSome ? ( - <> - - - + return ( + + {maybeNft.isSome ? ( + <> + + + - - - {currentMetaNFTChild?.title || - 'unknown'} -   - - ID: {maybeNft.value.item.toNumber()} - - + + + {currentMetaNFTChild?.title || 'unknown'} +   + + ID: {maybeNft.value.item.toNumber()} + + -
+ + Rarity:  + - - Rarity:  - - {getWeight}% - - + {getWeight}% + + - - {isInfinity - ? '∞ Infinity' - : supplyOf[index]} - -
+ + {isInfinity + ? '∞ Infinity' + : supplyOf[index]} + +
- {isInfinity ? null : ( - div': { bg: 'primary.a.300' }, - }} - /> - )} - - - ) : ( - <> - - - + {isInfinity ? null : ( + div': { bg: 'primary.a.300' }, + }} + /> + )} + + + ) : ( + <> + + + - - - Failed state - + + Failed state - - Rarity:  - - {getWeight}% - - - - - )} - - ); - }) - )} - - ) : null} - -
+ + Rarity:  + + {getWeight}% + + + + + )} + + ); + }) + )} + + ) : null} + + - - End in:  - - -
- - ); - } - )} - + + End in:  + + + + + ); + } ); -} +}; diff --git a/src/pages/Creator/Tabs/TabsPool/index.tsx b/src/pages/Creator/Tabs/TabsPool/index.tsx index ec543ceb..4d3db92f 100644 --- a/src/pages/Creator/Tabs/TabsPool/index.tsx +++ b/src/pages/Creator/Tabs/TabsPool/index.tsx @@ -5,7 +5,9 @@ import { PalletGamePoolDetails, } from '@polkadot/types/lookup'; import { useQuery } from '@tanstack/react-query'; -import { useAppSelector } from 'hooks/useRedux'; +import { useAccountContext } from 'contexts/contexts.account'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; + import { CreatorLoadingProps } from 'pages/Creator'; import { useEffect } from 'react'; @@ -25,13 +27,13 @@ interface TabsCollectionProps { } export default ({ setLoading }: TabsCollectionProps) => { - const { account } = useAppSelector(state => state.injected.polkadot); - const { api } = useAppSelector(state => state.substrate); + const { account } = useAccountContext(); + const { api } = useSubstrateContext(); const { data, isLoading } = useQuery({ - queryKey: ['creator_tab_pool', account?.address], + queryKey: ['creator_tab_pool', account.current?.address], queryFn: async () => { - if (api && account?.address) { + if (api && account.current?.address) { const service = await api.query.game.poolOf.entries(); return Promise.all( @@ -60,7 +62,10 @@ export default ({ setLoading }: TabsCollectionProps) => { }) ); - if (account?.address === owner || account?.address === admin) { + if ( + account.current?.address === owner || + account.current?.address === admin + ) { return { pool_id: pool_id.args[0].toNumber(), poolType: meta.value.poolType.toString(), @@ -82,7 +87,7 @@ export default ({ setLoading }: TabsCollectionProps) => { // not found return []; }, - enabled: !!api?.query.game, + enabled: !!(account.current?.address && api?.query.game), }); useEffect(() => { diff --git a/src/pages/Creator/index.tsx b/src/pages/Creator/index.tsx index a356d744..9e9756e9 100644 --- a/src/pages/Creator/index.tsx +++ b/src/pages/Creator/index.tsx @@ -24,6 +24,8 @@ import { Outlet, useLocation } from 'react-router-dom'; import DefaultCreator from 'layouts/DefaultLayout/DefaultCreator'; import TabsPool, { TabsPoolDataProps } from './Tabs/TabsPool'; import TabsPoolPanel from './Tabs/TabsPool/TabsPoolPanel'; +import TabsEmptyData from './Tabs/TabsEmptyData'; +import { useAccountContext } from 'contexts/contexts.account'; export interface CreatorProps { game?: TabsGameDataProps[] | undefined; @@ -51,8 +53,11 @@ export interface CreatorLoadingProps { } export default () => { + const { account } = useAccountContext(); const { pathname } = useLocation(); + const [tab, setTab] = React.useState(0); + const [loading, setLoading] = React.useState({ game: undefined, collection: undefined, @@ -63,25 +68,41 @@ export default () => { { id: 0, tab: , - panel: , + panel: loading.game?.data ? ( + + ) : ( + + ), background: 'gradient.linear.2', }, { id: 1, tab: , - panel: , + panel: loading.collection?.data ? ( + + ) : ( + + ), background: 'gradient.linear.3', }, { id: 2, tab: , - panel: , + panel: loading.nft?.data ? ( + + ) : ( + + ), background: 'gradient.linear.4', }, { id: 3, tab: , - panel: , + panel: loading.pool?.data ? ( + + ) : ( + + ), background: 'gradient.linear.6', }, ]; @@ -108,7 +129,7 @@ export default () => { <> {pathname === '/creator' ? ( <> - {isLoading ? ( + {account.current?.address && isLoading ? (
diff --git a/src/pages/Home/HomeMetaData.tsx b/src/pages/Home/HomeMetaData.tsx index b443be85..a83dfa7e 100644 --- a/src/pages/Home/HomeMetaData.tsx +++ b/src/pages/Home/HomeMetaData.tsx @@ -13,10 +13,10 @@ import { Box, } from '@chakra-ui/react'; import { Metadata } from '@polkadot/types/metadata'; -import { useAppSelector } from 'hooks/useRedux'; import SettingIcon from 'public/assets/line/setting.svg'; import ReactJson from 'react-json-view'; import { useState, useEffect } from 'react'; +import { useSubstrateContext } from 'contexts/contexts.substrate'; interface MetadataProps { data: Metadata | undefined; @@ -24,22 +24,27 @@ interface MetadataProps { } export default function HomeMetaData() { + const { api } = useSubstrateContext(); + const [metadata, setMetadata] = useState(); - const { api } = useAppSelector(state => state.substrate); + const { isOpen, onOpen, onClose } = useDisclosure(); useEffect(() => { - const getMetadata = async () => { - try { - const data = await api?.rpc.state.getMetadata(); - if (data) { - setMetadata({ data, version: data?.version ? data?.version : 0 }); + if (api?.isConnected) { + const getMetadata = async () => { + try { + const data = await api?.rpc.state.getMetadata(); + if (data) { + setMetadata({ data, version: data?.version ? data?.version : 0 }); + } + } catch (e) { + console.error(e); } - } catch (e) { - console.error(e); - } - }; - getMetadata(); + }; + + getMetadata(); + } }, [api?.rpc.state]); return ( @@ -76,9 +81,12 @@ export default function HomeMetaData() { size="6xl" > + Runtime Data + + ( - - - -); - export default function HomeSubstrateNode() { + const { api, PROVIDER_SOCKET, setSubstrate } = useSubstrateContext(); + const [nodeInfo, setNodeInfo] = useState(); - const { api, socket } = useAppSelector(state => state.substrate); useEffect(() => { - const getInfo = async () => { - try { - const [chain, nodeName, nodeVersion, health] = await Promise.all([ - api?.rpc.system.chain(), - api?.rpc.system.name(), - api?.rpc.system.version(), - api?.rpc.system.health(), - ]); + if (api?.isConnected) { + const getInfo = async () => { + try { + const [chain, nodeName, nodeVersion, health] = await Promise.all([ + api?.rpc.system.chain(), + api?.rpc.system.name(), + api?.rpc.system.version(), + api?.rpc.system.health(), + ]); - if (chain && nodeName && nodeVersion) - setNodeInfo({ - chain, - nodeName, - nodeVersion, - peers: (health?.peers.toNumber() || 0) + 1, - }); - } catch (e) { - /* console.error(e); */ - } - }; - getInfo(); - }, [api?.rpc.system]); - const dispatch = useAppDispatch(); + if (chain && nodeName && nodeVersion) + setNodeInfo({ + chain, + nodeName, + nodeVersion, + peers: (health?.peers.toNumber() || 0) + 1, + }); + } catch (e) { + /* console.error(e); */ + } + }; - const setConnect = async (value: string) => { - dispatch( - setConnectSocket({ - apiState: undefined, - socket: value, - payload: null, - }) - ); - }; + getInfo(); + } + }, [api?.rpc.system]); return (