// File: contracts/TCI.sol



// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/// @title: The Contact-IRL
/// @author: manifold.xyz

import "./manifold/ERC1155Creator.sol";

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                                                                                                                                                                                                                    //
//                                                                                                                                                                                                                                                                                                                    //
//    ;tt%tttttttttttttttttttttttttttttt%%%%%%%%%XtXtXtXtXt@t@t@t@t@SSXSSXSXSSXSSXSXSSSSSSSSSSSS%SS;XtXtXtXtXt:8S.;t%%%%%%t8tt.;t%%%%%%%%%%%% X .:S;X;X;X;Xtt  SStXtXtXtXtXtXtXtXtXtXt@:X88;X8S.XSS%SSS%SS%SSSSXSSSSSSSXSSSSSSSS%SS%S;XtXtt88:tt%ttttttttttttttttttttttttttttttttttttttttt%%%%Xt%XtXt@t@t@t@SSXSXX    //
//    ;Xt@t@t@tXt@t%XtXtXtXtXtXtXt@tXt@tXt8t8%8S%X%SX%X%XSXt@%@%@S@%@SSXSSXSXSSXSSXSXSSSXSSSSS%SS%SX%@%X%X%Xt@.8S:XSStXtXt%8tX.%@tXtXt@%@%@X% S%::XtX%SX%X%@%  XSX%@%X%@%@%@%@%@%@%@%X%%S88;X8S:Xt@t@t@t@t@t@SSSSSSSSSSSSSSSS%S%S%%%SXtX%@%8X;Xt@t@tXt%XtXt%S%%%%%%%%%%%%%%%%%%SSSSSSSXt@t@%8%%@SSX%X%@%@%@%@SSXSX    //
//    ;%S%St%t%%%%SX;tS;%%t%%%St%%StSt%StS%8tStSXt@S@%@%XSSXS@S@%@X@%@XSXSSXSXSXSXSSXSXSSSSSSSS%SSt@%@%@%@%X%@.8S.tt%XtStX;8tX.t%StStStStXtS% S .;X%S@SX%@%X%  @tXXSXSXSXSXSXSXSXSXSXSXt@88t@8X.XXt@%@%@%@SXtXSSSSS%SSSSSS%%S%SS;XtXtX%@tXt@S;%%%%t%tSS;tt%XtXtXt%SSSSSSSSSSSSSSSSX%@tt%%S%S%@%XX%@%@%@%@@SXt@SSXS    //
//    ;XSt%XtX%@tX%tXttXtX%XtX;XSttSSX%X%@%SXtXtX%@%@SXS@t@t@t@SXt@X@%@SXSXSSSXSXSXSSXSXSXSSSSSS%SXt@S%@%S@%XS.8S:SStX;%%X:8tX.Stt%XtXtXt%X;X S .;XX%X%X%XS@% StXSStXt@tXtXtXtXtXtXtXt@tX88tX8S.Xt@SXSXSX%XSXtXStXt@t@tXt@tXt@;@%SX%XtXtXt%8St@%Xt%Xttt%Sttt%t%;%XtStXt%SSSSSSSSS%t%%%@tXtX%S%@;SSt@t@%@tXSSX%@SSX    //
//    ;t%Xt%St%%%Xt%tXt%%%%%%%%tSt@t@tStSt@%XtX%SX%X%@SX%@%@XXt@XXSSX@%@SXSXSXSSSXSXSSSSSSSS%SS%St@XtX%X@%@%SS 8S.tStt@%%%t8%X tXSt%%SttSXt%% S .;StXSSXSX%@X  8%@SXSXSXXXSXXXSXSXSXSX%%S88tX8S.@XtXtX%SSXtXSXt@%XXt@t@%X%@%X%X%@S@%S%X%%@;8Xtt%%%S;StXttStt%t%S;tt;t%t%Xt%%%SSSSStStS;S;%%SX%%StXt@t@%@%XSt@SXSSS    //
//    ;SXtXt%X%@t%SSS;StSXtXtXtS;%%%S%%SXt%XtXSX%@%@XtXt@SX%@SXtX%@XSX@XSSXSXSXSXSSSXSSSSSS%SS%SS%S@%@%S@%SXt@ 8S:%%Xt%SXS;8tX.tttXSt%X%X;XX% S .;@Xt@tX%8X%@  8@t@XSSXSSSSSSSSSSSSt@t8t@88tX8S.Xt@%@tXtX%@tXSXt@SSXSSSXS%@%@%X%X%SXtSX%X;t@t%StSS;tttt%ttt%t%ttttt%tt%;;%%%SS%S%%tt%tS;StX%%X%%S@tSX%X%@t@%XX%@SS    //
//    ;%%SXSt%%%SX%S%%%Xt%%%St%%@%X%@t8tSX%X%%XtXt@tXXSXt@%@t@XXXXSSXSSSXSSSSXSXSXSXSXSSSSSS%SSSS@%XX%8%S@%@%S:8S.XtStX%t%t8tX.tX%t%StSt%XtX% X .tXXX%@X@XX@S SSX@XXXXXXXXSXXSXSSSSX%8StX88tX8S.XXSXSXt@%XSXtXt@tXt%XtXt@%SX%XtXt@t%X%%%%X;8tttSt;tS;t%t%t%tt%tt%ttt%%%t%t%%%%XtSt%StS;ttS;%StX%SSX%@%X%@%S@SS%%@t    //
//    ;XStt%XtXtStStS@t%StS%%SXtt%S%%St%%X%X%XtX%XS%XtXt@%@SXtX%@t@SXSXSSXSXSSXSSSXSSSSSSS%SS%StXt@tX%S@%X%SSX.@S.t%%%StXtt8%X.t%XtXt%Xt@tXt@ @ .XXS@@XXXXXXX  8@X@X@XXXXXXXXXSXSSSS@t@tS88tX8S.X;X;XtXSXtXtXSXtX%@%X%SX%@%@tXtXt%X%%X%Xtt@8;S;tt%;;tt%t%tt%%tttt%ttttttttt%%t;tt%%tttSt%tXtt%X%Xt%XtXStXXStXt@XSX    //
//    ;t%@tSt%%X;%%SS;SttS@%XttS%XtXtX%@tXtSX%Xt8tX%X%@XSX%@SXXXXSSSSSSSSSSSSSSSSSSSSSSS%SS%S%SXt@S%@%@S%SXttX @S.S%Xt%%St;8tX tX;St%XtSSXSXt @  SXXX@@@@@88@ S888@8@@@@@@XXXXXXXSXSS@%%S88tS8S.X%@tXXtXtXtXtXtXS%X%XX%@tSXtXtStXt%Xt%%tX;t@;;t%t%ttt%ttt%ttttt;tt%;tttt%tt%t%tt%t%%X;t%X;t@;%%%%@tt%%XtSt@tS@StXt    //
//    ;XtStStS%tSXtX;tStXtt%%Xt%%St%S%St%XS%X%X%SX%%XS%Xt@%X%@tX%@SSSSSSSSSSSSSSSSSSSS%SS%%S;@t@%SX%SXtX%@;Xt%:@S.t%%Xt%%St8SX.t%X;XtX%@Xt@S@ X  S@@@@@888@88  88888888888@@@@XXXXXXSX8t@88tX8S.X%XStX%@SS%@%XtXt@tXtXt%@%Xt%%%%tS%t%XtS;tSX;;%ttttttttttttttttt;ttt;tttt%ttt%t%%tS;tt%S;%%tSXtXt%SX%S;@tSt@%XS%@%    //
//    ;tSt%%SS%Xtt%%Xtt%tX%SttSt%%XtS@tXtt%XtXt@%%@%X@%@%@@t@SXXXt@SSSSSSSSSSSSSSSSSSSS%SS%SXtXSX%@%@tXtX;StX%;@S.S%%%SXt@:8tX.tS;%SXtXt@SSSS X  @88888888888 @88888888888888@@@@XXXXXXtS88tX8S:X%X%XtXt%SX%XtXt%Xt%StXt%StXt@%XtX%Xttttt%XS:ttt%;ttt%;tttttttttttttttt;t;ttt%tt%ttt%X;;%SXttt%%%@tStSt%%@tXStXXt@    //
//    ;%%XtX;t%tX%Stt%XtS;tt%X;Xt%%X%t%%XtSt%@tSS%SXtX%S@tXXtXtXSXtXt@t@t@t@t@t@t@tXtXtXtXtXt8t%@tSXt@t%%Xt%%X.@S.;XtXt%%%t8%X.%%XSXtXSXt@XXX S% @88888888888 X@88888888888888888@XXXX@%S88%@8X.X%X%XSt@SStSt%XtXtXt%%S@tt%t%%tt%tttt%%%%t@@:;tttttt;t;t;;;;;;;;;;t;;;ttt;t;tt;tt%t%tttStttSXtXtS;S;%%XSt%XtXt%X%X    //
//    ;SX;%tXtXt%%tX%%%%tSXtS;%tXtS%%Xt%%X;XttS%@%@tXSX%@%XSXSXtXSXSXt@SXt@%@%@%X%@%@%X%X%X%S%@%SX%@t%@%SSSXtX @S.tt%%%X%X;8tX.tX;t@%XSS@XX@@ %  8888888888@@ X@@XX@@@888888888888@@@@@tS88tX8 ;@%SXtS%%%%SX%Xt%%%%X%@t%XtSXt%SX;%%%S%%tt;8;;tt;;;t;;t;;;;;;;;;t;;;;t;t;ttt;t;tt;tt%%%tt%St%tt%%t%%X%S;StXtS@%@S%X    //
//    ;%%@t%%%tXtXtt%XtS@tt%%%X;tXtXt%SXtt%%XSXt%XtXt%X%X%XtXtX%XStX%@%@%@SXSXSXSXSXSXSXSXS%@tSXt@t%@t%SXtS%S;.@S.StStS;%t;8SS:%%@S%@SSXXX@@8 %  8888@8@@XXXSS t8SXSXXXX@@888888888@@@8%X88tX8X:%@S@tX%@%@t%%%X%X%St%%%%tSS;%S%tSt%%%%%%t;8t;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;tt;tttt%t%t%St%tStSt%StS%%%%Xt%X%XtXt@%X    //
//    ;XttSXtX;t%tStS;S%%%XtSS;Stt%%%Xtt%X%Sttt@tStX%XtXtXtXtX%@t@%@%@St@tXtXtXtXtX;S;S;S;@%S@%%S%Xt%XtXtX%%%@ @S.;%%%%XtX:8tX:X%X%@SSXX@@888 ;@ 888@@XS@SXSS 8SSS@@XSSSS8X@88888888888SX88%X8S:@tXtXtStStSS%St%%%%XtXtSttt%S%%t;ttttttt;;8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;t;;t;ttt%t%%%tttSttXtXtXttSXt%S@;X%Xt    //
//    ;t@tX;%%XtS;%%t%SSt%tXttttSXt%%tSt%tSXtXtt%StSt%S%XSSS%@%X%XSS%Xt@SSt@tX%X%X%XtX%X%X%X%SXX%StXtStt%%SXt%.@S.StXtS;%%t8SS.S%@%@XXX@@8888 ;  @@XXSXX@8S@X @%SX@%SS@@X@S@SX@88888888XX88SX8X.XXtX%S;%%S%%StStXttttt%tXtSt%%tt%Sttttt;;;X;:;;;;;;;;;:;::::::::::::;:;;;;;;;t;t;tttttt%%St%%tX;t%t%%XtS;X%XtXt@tX    //
//    ;%%S;Xttt%tSt%XtS;%X;tStXt%t%SS;t%St%t%%%SSt%%XStX;ttS%S%SXtXtXSX;XtX%XSXtXS%X%@%SXtXtX%%%SXtt%%XtX%S;tS.@S.tttS;X%@;8SS.S%@X@XX@@88888 .8 XSSX@%t 888X@8S :tXXS@XXSX%8SX@@888888XS88SX8X.StXtX;XXStXtt%%%tStStSttttttt%tt%ttt;t;tt;X::;;;:;:;:;:::::::::::::::::;:;;;;t;;;t;t%tt%t%StS;;%XtXt%t%%X;%XtXt%Xt    //
//    ;%X;t%StStt%X;;%%S;t%%tttStStttS;ttS%SXt%S;XtS;t%%XtXtSXS%@t%Xt%XtXt@%%%X%XtXtXtX%X%%SXtXSt%S%Xt%%t%tSt%:@S.StSt%%S%t8S%:X@X@X@@8888888  X S% %@  S@;tt888.XS%@;tS%SSXXSSS8X@8888S%X8SX8S:@XtXt@;;t%%SSX%%%tttttS;t%%t%tt%ttt;t;;;;;X.:;::::::::::::::::::::::::;::;;;;;;;t;ttttt%tttttt%S;ttStX%%%XtStt@tXt    //
//    ;%t%X;t%tStttStS;tt%XtStttttStttt%%%Stt%S;%tS;%X%St%%Xtt%%XtXt@%t@tStXX%%SXtXt%SXtSt@t%%t%X;t%%%%SXtS;%X.@S.t%%SXS%8;8S%;XXX@@@88888@8XS @ S8SX.t%;;S;8;;tt;.Xt8 :;ttSXSSX@@X@@888X8@X@8X:XSXtXt%@t@t@ttStSt%Sttttt%t%;ttttttt;;;;:%8.:::::::.:::.::::::::.:::.:::;:;;;;;;;;t;ttt%ttt%Stttt%t%%tX%S;%%Xt%@tX    //
//    ;%Xt%%StttSttttt%%SttttStSttttt%tSt%%StttStttS%S;tXtS;XtXt%SXtt@t%%Xt%%XSt%SSS@t%S%X;XtS@t%XtXtXtS;ttS;t:@X.S%XttX%X;8St;@@@@@888888@XX  8t8@::tttt@t%t%%%%tt;;@S:@.::%%@8XXX8X@88X%@X@8X;@t@%XStt%%%tXttttS;tt%t%%tttt%;tt;;;;;;;:@8.::::::......:........:..:::::;:::;;;;;;;t;ttt%ttttStStXtStt%%X%S;Xt%@;    //
//    ;t%%X;t%%%tSttt%t%SS;tttt;tt%tttt;;%%tt%%tSt%S%tX;t%%%%S;%XttSt%XtS;X%S;t@tXtS%XtXtt%%SX;t%t%t%t%tStttXt:@S.t%XtXt@Xt@X;;8@@888888@@X@%8: 8.;tt%%%%t8;%8St%8t%%t;%Xt   :t%%XXS8XX8%%S@88S;@X%@t%@%XtXtt%S;tttt%t%tt%tttt;t;;;;;;:;:@t::.......:.................:.::::::;;;;;tttttttt%%%tttttttX%St%%St%Xt%X    //
//    :%%St%%X;S;;t%%t%%;;ttttt%t%t%%;ttt%t%%%%tt%SS%%t%Xt%SttXttSt%%S;St%%S%@t%%X%Xtt%%Xt%XS;StStSXtStttStttX.@X.Xt%X%@t@tX@;t8888888@@XX8tXtSSttt%Xt%%S;tXt;;S;t%%%%%S:.@    :t%SXS8S8StS@8@Xt8SXSX%%StSt%SS;%%%t%t%%ttttt;t;;;;;;;;;;.@X....:.....................:...::;::;:;;;;ttt;ttttt%t%StSt%t%%SXt%@tS%@;    //
//    :St%Xt;;tt;tt%tt%%t%t%t%tt%t%ttt;ttt%t%tt%%%%%%S%%tStt%%t%%%%Xtt%%X%X%%%%Xt%%tSXt%%Xt%ttt%tXtt%%SS;tStt%:@S.SS%@%@@X%X@:%88888@@@X@@S.tttt%%S%tStttS;tt%%tt%SSSSSS%;.@@    :t@SS88ttS88@Xt8XSt@X%Xt%XtS;t%S;t%%ttttttt;;;;;;;;;;:;.8S .:.........................:.::::::;;;;;;;ttttttt%%ttttStXtSt%XttXt%%@    //
//    :tS;tt%tttttttt%ttt;ttt%t%;ttttttt;tttttttt%tt%t%tttt%%%XtStttStStt%t%St%tStXt%%%XttStXtXtS;t%X;ttS;tXtX.8S.SS%XX%@@@@8.@8888@XXS8;. :;tSt%%%%ttSttttStX%St%Xt@t%X;%t8:: 8  .;tS%8;tt88XXX8XX@tX%XtSt%%Stttttttttttt;t;;;;:;;;::::.8S ............................:.::::;;;;;;t;;;;tttt%tt%S;ttt%%%%t@ttX%%%    //
//    :tt%%tt%t%ttt%t%ttt%;tt%ttt;ttt;;;ttttttttttttt%ttt%t%%%tt%Sttttt%St%S;%S;t%tSStS;S;t%t%t%tXttt%X;t%%%%%:@S:St@SX8@@X@8.X8@8@XSX8 8@:;ttttSt%%%ttS;ttt%t%%Xttt%SS:%8tt:X; 8  ::tSS;:%88SSX8@XX@X%XtSXtS;%S%t%tttttt;;;;;;;;;::::::.8t:............................::.:::::;;;;t;t;t;tttttt%tt%StStX%%tXtt@%X    //
//    :t%S%t%t%tttttt;ttttttttttt;t;tt;t;t;ttttttttttt%tt%t%%t%t%tS;StS;t%tt%%tS;St%%S;ttXt%XtSttt%%SS;t%XtS@%;8S:X@t8X@@8@X8 8@@XS8SX8.@:tStt%ttt%t%%%tXt%%%%Xttt%Stttt;XXt;S:S@SX   :S:.%8@%XX888XXSXSS%%X;%%S%%%%ttt;;tt;t;;;;;::::::.@X.................. ............:.:::;;;::;;;t;tttttt%ttt%t%t%t%XttXtt%%    //
//    :t%%%%tttttt;ttt;ttttt;;;;;t;;;;t;;;;;;t;t;ttttttt%;tt%%t%ttt;;t;t%%S;%%%%%t%Stt%%S;%%t%tStStX;;%Xtt@tSX.8S;@X8X@8888%X 8XS8StX. ;;tttStSSt%X;%S%%tSt%SttSt%%tXtSttSt%X;;;StX@   : :tXStX8888@XXSSSXt%SXt%S%%%%t%;tt;;;;;;;::;::::.8:...........   .  ..  .............::::::;;;;;;;;tttt;%t%tt%%SStt%%tXtXt    //
//    :t%t%tt%;tt;t;ttttt;;;:;;;;:;;::;;;;t;;;t;;;tttt;tt%;ttttttttt%ttS;;t%%t%%%%SXtStS:t%%X;ttt%%tXt%%Xt%Xt@.8%t8X@@88888SX @SS@S@% %@ttS;tt;;tt;%%%8S:;%%%S;tSttXX;t%%tX%t%%t;@S @X   ..%XtX88888@@XStXS%StSt%%%t%t;;t;t;t;;;;;;::::::8;:.......   .. ..  . ..  ..........:::::;;;;;;t;ttttt%tt%%%t%tt%%Xt%t%t%    //
//    :tt%%%%ttt;t;t;t;;;;;;:;:;;;;;;;;;;;;;:;;t;;;;;tttttt;ttttttt%t%t;;%t%%t%XtXtt%ttt%S%%tStStXtt%XtS;X%X%X:8%%8@88888@8Xt SS@Xt.8.;;t%tSt%%XttS8tt;;tt%X;t%%tSttt%SXt%%SX%Sttt@88 8 8: t%.@8@8888@XXXtX%X;tX;%%%%tttt;t;t;;;;;::::.:.8::....... .. .   .  .  ..........:..::::::;;;;;;;;ttttt%%tt%%%%%StSX%Xt%    //
//    :;t%%ttt;tt;t;;;;;;;:;;:;:;:;;;:;:;;:;;;;;;;;;;;;;ttttttttttt%ttttttttt%t;tttt%%%St%%%%t%%%tX%S;%%SXXt8X:8tX88888@@X8;t t%%.S..tt%S;tS%XttStttS%tttS%t%StStSXtX%ttSXt%t%SStX:8tX88@% :; XXS@@888@@XXS%%@ttSt%%%t%ttt;;;;;;;;:::::: SS.......   .  .  ..  .. .. ........:.:::::;:;;;;;ttttttttt%%%t%SS%St%%St    //
//    :;tttt;tt;t;;t;;;;;::;:;;;:::;;:;::::;;:;;;;;;;;;;;;;t;ttt;ttt;ttt%tt%t%t%t%t%%%%tS%%S%%%S%%%%Xt@X%Xt@X@;8;X8888@XSXS;:%;:.@. t%%tt%%t%t%ttSt%S%St%S%@tt%tXtt%t%XtS;SXtXtt%ttX..XX8SX  .@%@8888888@SXX%SXttSttt%tttt;;;;;;:;::::::.t%....... .   . .   .  .   ............::::;:;;;;;;;tttttt%%ttt%XtSt%X;t%    //
//    :;t%%ttt;;tt;;t:;;;;:;:::::::::::::::;:;;::;;;;;;;;;t;;;;;t;;;tttttttt%tt%t%%t%t%%Xt%SSS%StXStXS;@%@@XX8%8;@88@XX@SSX. S:SX .tStStS;%Xt%S%S;%%S%%%SXtt%XtS;SStXttS;X%t8%%StXtt%;88@8@   XSSX@X8888@@XX@%XtS;t%%%%ttt;t;;;:;::::;;:.8@...... .. . . ..  ..  . ............::..:::;:;;;;;;;ttttttt%%tttt%S;t%%    //
//    :;tt%ttttt;;;:;;;;;::::.::::.::::::::::;;:;:;;;;;;;;;;;t;;t;tt;ttttttttt%tt%S;tt%%%t%XtXt%%t%XtXX%8XX@88X8:8@XS@SXSSS ;X.:S;%S%%tS;%%tSt%%tX;%XtStS;tS%%S;%tt%%Xtt%XtS;St%%XtX%X:t  @8@%X;%SX@S@8888@XX%@t%XtSt%ttt;t;t;;;;;;;::::.S8 .........  .  . .  .     .........:...::::;;;;;;;;tttttttt%tt%%%%t%SS%    //
//    :;ttttttt;;;;:;;;;::;:::.......::::::::::;;:;:;;:;;;;;;;;;;;;tttttttttttttttt%%%%%%%S;tt%X%@%XSt8@XX@888X@.8X@XXStt:.X@@S 8%XtSttt%%XSSt%Xtt%S;t%ttStX%X;%Xt@t%%@t%%88;tXtSt%X;tt:8t888X@ .%S@@888888@XX%8%%%Stt%%tt;ttt;;;:;;;:::.88........  ..   ... . .... ..............::;:;:;;;;;;;;;ttttttt%t%%%St%%    //
//    :;t%ttttttt;;;;;::;;:;;:::::::::...::::::::;::;:;;:;;;;;;;t;t;;t;t;ttttttttt%t%%t%St;%XtS;StXt8@t@@@888888.8SSS%%;. X@;;:;%%@tt%XXXX;tt%%%StStStXtS;%XtXtXt%%8@%X@tSSXt%St%SS%@tXttX8:8@8  .%S@SX@8888@X@%@Xt%S;t%tttt;t;;;;;;;:;:.8: ..........  .       .   ... .......:..:.::;::;:;;;;;;;t;tttt%ttt%%tt%%    //
//    :;tt%ttt;;;;;;;;;;;:;;;::;:;:::..::::::.:::::;::;::;:;;;;;;;;;t;;;;;t;tttttt%t%%%tt%%%%XtSSSSXt8@@@8888888.S%%%:. @@;..8tSXt%XttX;tt%%%X%tt%%S8ttSS@tt%%@tX%X;8t%X%@t%X%%XSSSt%XtXt;@@.X88X .;;SXXX@888X@Xt@St%St%%tt;t;;;;;;;;::::;@..:........ .. . ... . . .  ...........::::::;::;:;;;t;;;ttttt%;ttt%t%t    //
//    :;ttttt;;t;;;;:;:;:::::;;::::...::::....:::::::;::;::;;;;;;;;;;;;;;t;ttttttt%t%%%%%Xt@ttS%XSSX@X888888@X@8;S%t;  8X@@ S;%StX;tt%t%XtS8%tXtStXtSStXttXXSt%%%XtX@tSt@t%88;S%t%@StSt%Xt: t@888@  :t%XX@8888@@XtX%X;Stt%%%t;tt;;;;;:::::%............  . ..     ..  . ..........:.:.::;:;:;;:;;;;;;;;;tttttttt%;    //
//    :;t%tttttt;;;:;:;:;;::;:;::...:..::...:....::::;:;::;:;:;;;:;;;t;;;;;t;;tttt%t%%%Stt%%X%@%Xt8XX@@88888XS88:tt  8  t%.;tSX;%t8XXt@tt%tt%%t@;tt%t%X;@tt@tXX8@tXS@StStX%%X%Xt8%X;StXtS%@:. 8%888  :;%XX8888@XXXtXt%%%%t%tttt;;;;;;;;;;.tt::.........  .   .. ... . ...............:::::::;:;;:;;;;;;t;;tt%ttt%t    //
//    :;tt%ttt;t;;;;;;::;:::;:::::::..:....:..:.:::::::::;:::;;;;;;;;;;;;;t;tt;tt%;t%t%tStStS%XXS@X@@88888@XXS@X%: X t8 :;t%SS%SX;t;@X:%StStS@tXXXtXStXtt@;.X;%SSXtS8SXtSt@@;XtStX;%%S@t%S%tX @.S@88  ::tXS88888@XXXSSStSt%%tttt;;;;;;;:; 8@ .........   ..  . .    .      .............::::::;:;;:;;;;;;;t;tttt%;    //
//    :t%tt%tt;t;;;;;::;:::::::::::..::....:....:.::::::::;:;:::;:;;;;;;;t;;;tttttttS;%t%tt%%@tXXS@@@8888@X@SXS8% @ .88t%tStX%S%%%%X::t%t%tXtt%ttt%t;St@tXt8t@%%X;XS;.8t@:;StXtX%X%@X;@St8%@:t  tSX88  :t%XX8@888@S@t%%%tXtt%ttt;;;;;;;::.S8.......... .. . .. . ...  .... ...............::::::::;;;;;:;;;;;;t;t;    //
//    :%%%tttt;t;;;;;;;:::;::::;::::..:.::.:::.:......::::::::;:;:;:;;;;;;;;tttttt%;t%%SXtX%XSXSXX@8888@@XX@%S%@% 8tS%%SSS;X;%%SX%tt%X;Xt%%%X%XtX%S8@;S%XSXt@88X%Xt@%@tX;%XtStXSt88;Stt%S%S%%;t8;;S@@8  .ttSX888888@@XX%X;S;t%tt;;;;;;;::.; :::::......        . .   .    .  ..........:.....::::;;:;;:;;;t;;t;t;;    //
//    :ttt%ttt;t;;;;;::;;;;;;:;:::::::::::::::::.....:::::::;:::;:;:;;:;;;t;t;tttttt%%@tt%%Xt@t@X@88888XXXSXS;;@S.:@:Stt%ttt%SS%%SXtS;ttXtX;tt8X;%Xt@t@%XSSX@888XXXX@XXt@tX%@%%@t@X%XSt8:tXt@t88@.;%XX@ @::t@XX@888@%@t@;%ttS;tttt;;;;;::::tt::.:...... .........  ... ... . . ..............::::::::::;:;:;t;;;;;    //
//    :%%%tttttt;;;;;;;;;;;:;;;::::::::::::::::.....:...::::::::::;;;;;;;;;;;tttttt%%tt%XtXSt@@X@@8888@XS@XXX;.@t:.;ttt%SXt@@tXtS:t%tXt @;tXtS::%StXtX%8SSSXXX88XXSt%XtX%X%Xt@%8%t@S;;t@tXtSXt:  :.t%@8@.  :tX@X8888@@XSX%Xtt%tttt;t;;;:::.8@.:.:...... .........  .  .       ..............:....::::;:;;::;:;;;t;    //
//    :%%S%tttt;t;;;;;;::::;;:::::::...:::::::...::.:.....:::::::::::::;;:;;;;;;;;t%%tt%SttS@t@X@8888XXSX%XXt.@8:tt%St%S%%%tttt%t%%S%t%8t8@;tt%XtXtXXX8t@SXXSXXXSXXX@SXXXSXt@%@8Xt%;%88tX;X%%S@t:S  ;tX888  :%X8@8888XtXtS%%%ttt;;::::::::.X: .................. ..  .   .... ......................:::::::::;::::    //
//    :t%%S%ttt%;%tt%tt%SXXXX@@8@88888888@SS@X%@S%SXttt%;%;%;t%;t;;t;t;t;ttt%t%t%StS%S%XtX%X%SS@S8@88S8X8%%t:XX;8;t%%St8tt%XtS;St%XtStt@;%@;SSttSSXtXXXSXX@X@X@XS;8t8StXt%@%%@tXt@XSt;Xt%X;8St%SXX@88 X8@8X@88XXX%%%%%%t;t;;;;;;tttt;t;tt;t%8%tttttt;ttttt;tt;t;;tttttt;tttt;;;;t;;t;;t;tt % % % % % % % % t ; t t    //
//    :%S%%%ttt;tttt;ttt;t;;t:;:;::;;:;;;::: :....:.......:.........::..:::::::;;;;;t%%%%X%@X@8888@X@St%%;:.8S8:t%Xt%t%ttXtttt%tS;%ttS;t%%t%S;S%@tXt8:;t8@X@@8@@X@8@Xt@%@%SXt%Xtt.S:S:tX%@;S@;%@;8t8@X8888888@@@@X@ 8 8@XSXXXSSXSXSXSSSSSXS%8SSSSXXSXXXXXXX8S8 8%8%88;88888888888888888888888888888888888888888888    //
//    :t%S%%tttttttt;;;;;;:::::::::::::::::...........:.::::.::::;:;;:t;;;;tttt;tt%%SX%@%X8%@@@8888@@SSS%:.@@t:;t%ttS;t%tt%t%Xtttt%@ttt%StX;t%St%%XSS@88@8888888@8@X@St8%8%S@tX@StXttSXtS%%tt@%tX;@Xt@@8@88888888888888XXXXSXSSSXSXSSSXXSSXSX@SXSSXSSSXSSXS XSX%St% 8 8; ; t %.S:S:S: 8t;;  %;%; %.tt;;ttt; 8; 8;%    //
//    :;%%S%t%%%tt%;tt%;tttt%t%%S%%SSXXX@@8888888888@@8XXX8X@@SSXSSSSSSX%S%%tSS%S%%tSSt%St%XSSS8@@888X8;%%;%t%t;St@;;t%StSt@;t%%Stt@;tS;ttS8;tXS%8SSS@@888888888888XXt@XXt@%SX;tXt%XXt%@%8SXt%Xt%@;X:8888888888@88@@@@@@@8@8@@@@@@@@@@@@@@@X8@@@@@@@@@@@@@XS@@@@X@XX8@8 8 8 8 8 SS%X XX8 S SX 8 SXX S S SXSS8 SS 8    //
//    :t%%%%tt%t%t%%%tttt;t;t;tt%tS%%tXXSXX@8888888888888@88X@@X8@8S8%X%X%tSX%S%t%XSSSS@%8S8S8@@888888%8;8X%St;ttt;;tStttt%%t:;tt%%%%ttt%%;t8t%tXt@SX@888888888888@@@@SSSXXX@XtX;X%t%Xt%S%S%Xt%Xttttt8. SS@8888XS%%;;:..  .:::;;;;t;tt;t;: 8 %;tt;ttt;t;tt;tttttttt8.8 .8 8  8  8 ..8 8 8  8  8  .8  8  .8  8 8  8    //
//    :ttSttStt%ttttttttt;;t;t;t;%;%;ttt%%SSSSS@SSS%X%X%@SS8S%@XXXX@SXXX@@8@88888888X8X88X8@88888888@St; t@@S;;tttt%tttt%Xttt S;tS;tXt%Stt%%t%XtX%8@X888888888888888XXXXStX;St%S%%X%XtXtXS%XtXt%XtXt%t t@@88888@8@@@XSS @ @ X S S % S    :X;  % % S % S % S % 8;t                                                     //
//                                                                                                                                                                                                                                                                                                                    //
//                                                                                                                                                                                                                                                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


contract TCI is ERC1155Creator {
    constructor() ERC1155Creator("The Contact-IRL", "TCI") {}
}

// File: contracts/manifold/ERC1155Creator.sol



// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/// @author: manifold.xyz

import "@openzeppelin/contracts/proxy/Proxy.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/StorageSlot.sol";

contract ERC1155Creator is Proxy {

    constructor(string memory name, string memory symbol) {
        assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1));
        StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = 0xE9FF7CA11280553Af56d04Ecb8Be6B8c4468DCB2;
        (bool success, ) = 0xE9FF7CA11280553Af56d04Ecb8Be6B8c4468DCB2.delegatecall(abi.encodeWithSignature("initialize(string,string)", name, symbol));
        require(success, "Initialization failed");
    }

    /**
     * @dev Storage slot with the address of the current implementation.
     * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
     * validated in the constructor.
     */
    bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /**
     * @dev Returns the current implementation address.
     */
     function implementation() public view returns (address) {
        return _implementation();
    }

    function _implementation() internal override view returns (address) {
        return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
    }    

}

// File: node_modules/@openzeppelin/contracts/proxy/Proxy.sol



// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)

pragma solidity ^0.8.0;

/**
 * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
 * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
 * be specified by overriding the virtual {_implementation} function.
 *
 * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
 * different contract through the {_delegate} function.
 *
 * The success and return data of the delegated call will be returned back to the caller of the proxy.
 */
abstract contract Proxy {
    /**
     * @dev Delegates the current call to `implementation`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _delegate(address implementation) internal virtual {
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
     * and {_fallback} should delegate.
     */
    function _implementation() internal view virtual returns (address);

    /**
     * @dev Delegates the current call to the address returned by `_implementation()`.
     *
     * This function does not return to its internal call site, it will return directly to the external caller.
     */
    function _fallback() internal virtual {
        _beforeFallback();
        _delegate(_implementation());
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
     * function in the contract matches the call data.
     */
    fallback() external payable virtual {
        _fallback();
    }

    /**
     * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
     * is empty.
     */
    receive() external payable virtual {
        _fallback();
    }

    /**
     * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
     * call, or as part of the Solidity `fallback` or `receive` functions.
     *
     * If overridden should call `super._beforeFallback()`.
     */
    function _beforeFallback() internal virtual {}
}

// File: node_modules/@openzeppelin/contracts/utils/Address.sol



// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: node_modules/@openzeppelin/contracts/utils/StorageSlot.sol



// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.

pragma solidity ^0.8.0;

/**
 * @dev Library for reading and writing primitive types to specific storage slots.
 *
 * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
 * This library helps with reading and writing to such slots without the need for inline assembly.
 *
 * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
 *
 * Example usage to set ERC1967 implementation slot:
 * ```solidity
 * contract ERC1967 {
 *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
 *
 *     function _getImplementation() internal view returns (address) {
 *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
 *     }
 *
 *     function _setImplementation(address newImplementation) internal {
 *         require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
 *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
 *     }
 * }
 * ```
 *
 * _Available since v4.1 for `address`, `bool`, `bytes32`, `uint256`._
 * _Available since v4.9 for `string`, `bytes`._
 */
library StorageSlot {
    struct AddressSlot {
        address value;
    }

    struct BooleanSlot {
        bool value;
    }

    struct Bytes32Slot {
        bytes32 value;
    }

    struct Uint256Slot {
        uint256 value;
    }

    struct StringSlot {
        string value;
    }

    struct BytesSlot {
        bytes value;
    }

    /**
     * @dev Returns an `AddressSlot` with member `value` located at `slot`.
     */
    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.
     */
    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.
     */
    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.
     */
    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `StringSlot` with member `value` located at `slot`.
     */
    function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `StringSlot` representation of the string storage pointer `store`.
     */
    function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := store.slot
        }
    }

    /**
     * @dev Returns an `BytesSlot` with member `value` located at `slot`.
     */
    function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := slot
        }
    }

    /**
     * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.
     */
    function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {
        /// @solidity memory-safe-assembly
        assembly {
            r.slot := store.slot
        }
    }
}