- #include <iostream> 
- #include <iterator> 
- #include <type_traits> 
- #include <tuple> 
- #include <vector> 
- #include <string> 
- #include <algorithm> 
-   
- std::vector<std::string> tokenizeLine(const std::string str) 
- { 
-     std::vector<std::string> tokens; 
-   
-     std::string::size_type start = 0; 
-     std::string::size_type end   = 0; 
-     while (end != std::string::npos) 
-     { 
-         enum POSES // Deliminators 
-         { 
-             EQUALS, 
-             OPEN, 
-             CLOSE, 
-             SPACE, 
-             EOL, 
-             RETURN, 
-             TAB, 
-             COMMENT, 
-             POSES_SIZE 
-         }; 
-         std::string::size_type pos[] = 
-         { 
-             str.find('=', start), 
-             str.find('{', start), 
-             str.find('}', start), 
-             str.find(' ', start), 
-             str.find('\n', start), 
-             str.find('\r', start), 
-             str.find('\t', start), 
-             str.find('#', start) 
-         }; 
-         end = *std::min_element(pos, &pos[POSES_SIZE]); 
-   
-         switch (str[start]) 
-         { 
-         case('=') : 
-             tokens.push_back("="); 
-             break; 
-         case('{') : 
-             tokens.push_back("{"); 
-             break; 
-         case('}') : 
-             tokens.push_back("}"); 
-             break; 
-         case(' ') : 
-         case('\n') : 
-         case('\r') : 
-         case('\t'): 
-             break; 
-         case('#') : 
-             return tokens; 
-             break; 
-         default: 
- 			if (str.substr(start, end - start).length() > 0) 
- 			{ 
- 				tokens.push_back(str.substr(start, end - start)); 
- 				--end; 
- 			} 
-         } 
-   
-         // If at end, use start=maxSize.  Else use start=end+delimiter. 
-         start = ((end > (std::string::npos - sizeof(char))) 
-             ? std::string::npos : end + sizeof(char)); 
-     } 
-     return tokens; 
- } 
-   
- int main() 
- { 
- 	auto ans = tokenizeLine("show_position = { x=-9 y =78 }"); 
- 	std::ostream_iterator<std::string> o(std::cout, "\n"); 
- 	std::copy(ans.begin(), ans.end(), o); 
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KI2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRva2VuaXplTGluZShjb25zdCBzdGQ6OnN0cmluZyBzdHIpCnsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0b2tlbnM7CgogICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBzdGFydCA9IDA7CiAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCAgID0gMDsKICAgIHdoaWxlIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCiAgICB7CiAgICAgICAgZW51bSBQT1NFUyAvLyBEZWxpbWluYXRvcnMKICAgICAgICB7CiAgICAgICAgICAgIEVRVUFMUywKICAgICAgICAgICAgT1BFTiwKICAgICAgICAgICAgQ0xPU0UsCiAgICAgICAgICAgIFNQQUNFLAogICAgICAgICAgICBFT0wsCiAgICAgICAgICAgIFJFVFVSTiwKICAgICAgICAgICAgVEFCLAogICAgICAgICAgICBDT01NRU5ULAogICAgICAgICAgICBQT1NFU19TSVpFCiAgICAgICAgfTsKICAgICAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvc1tdID0KICAgICAgICB7CiAgICAgICAgICAgIHN0ci5maW5kKCc9Jywgc3RhcnQpLAogICAgICAgICAgICBzdHIuZmluZCgneycsIHN0YXJ0KSwKICAgICAgICAgICAgc3RyLmZpbmQoJ30nLCBzdGFydCksCiAgICAgICAgICAgIHN0ci5maW5kKCcgJywgc3RhcnQpLAogICAgICAgICAgICBzdHIuZmluZCgnXG4nLCBzdGFydCksCiAgICAgICAgICAgIHN0ci5maW5kKCdccicsIHN0YXJ0KSwKICAgICAgICAgICAgc3RyLmZpbmQoJ1x0Jywgc3RhcnQpLAogICAgICAgICAgICBzdHIuZmluZCgnIycsIHN0YXJ0KQogICAgICAgIH07CiAgICAgICAgZW5kID0gKnN0ZDo6bWluX2VsZW1lbnQocG9zLCAmcG9zW1BPU0VTX1NJWkVdKTsKCiAgICAgICAgc3dpdGNoIChzdHJbc3RhcnRdKQogICAgICAgIHsKICAgICAgICBjYXNlKCc9JykgOgogICAgICAgICAgICB0b2tlbnMucHVzaF9iYWNrKCI9Iik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UoJ3snKSA6CiAgICAgICAgICAgIHRva2Vucy5wdXNoX2JhY2soInsiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSgnfScpIDoKICAgICAgICAgICAgdG9rZW5zLnB1c2hfYmFjaygifSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlKCcgJykgOgogICAgICAgIGNhc2UoJ1xuJykgOgogICAgICAgIGNhc2UoJ1xyJykgOgogICAgICAgIGNhc2UoJ1x0Jyk6CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UoJyMnKSA6CiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CgkJCWlmIChzdHIuc3Vic3RyKHN0YXJ0LCBlbmQgLSBzdGFydCkubGVuZ3RoKCkgPiAwKQoJCQl7CgkJCQl0b2tlbnMucHVzaF9iYWNrKHN0ci5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0KSk7CgkJCQktLWVuZDsKCQkJfQogICAgICAgIH0KCiAgICAgICAgLy8gSWYgYXQgZW5kLCB1c2Ugc3RhcnQ9bWF4U2l6ZS4gIEVsc2UgdXNlIHN0YXJ0PWVuZCtkZWxpbWl0ZXIuCiAgICAgICAgc3RhcnQgPSAoKGVuZCA+IChzdGQ6OnN0cmluZzo6bnBvcyAtIHNpemVvZihjaGFyKSkpCiAgICAgICAgICAgID8gc3RkOjpzdHJpbmc6Om5wb3MgOiBlbmQgKyBzaXplb2YoY2hhcikpOwogICAgfQogICAgcmV0dXJuIHRva2VuczsKfQoKaW50IG1haW4oKQp7CglhdXRvIGFucyA9IHRva2VuaXplTGluZSgic2hvd19wb3NpdGlvbiA9IHsgeD0tOSB5ID03OCB9Iik7CglzdGQ6Om9zdHJlYW1faXRlcmF0b3I8c3RkOjpzdHJpbmc+IG8oc3RkOjpjb3V0LCAiXG4iKTsKCXN0ZDo6Y29weShhbnMuYmVnaW4oKSwgYW5zLmVuZCgpLCBvKTsKCXJldHVybiAwOwp9