608060405234801562000010575f80fd5b50620000216200002760201b60201c565b62000191565b5f620000386200012b60201b60201c565b9050805f0160089054906101000a900460ff161562000083576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8016815f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614620001285767ffffffffffffffff815f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff6040516200011f919062000176565b60405180910390a15b50565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b5f67ffffffffffffffff82169050919050565b620001708162000152565b82525050565b5f6020820190506200018b5f83018462000165565b92915050565b6141a2806200019f5f395ff3fe608060405234801561000f575f80fd5b50600436106101d7575f3560e01c8063836a104011610102578063c59dfee0116100a0578063ee3d17061161006f578063ee3d170614610510578063f242432a1461052c578063f2fde38b14610548578063fea3e61314610564576101d7565b8063c59dfee01461048c578063dbd381f3146104a8578063e02679e9146104c4578063e985e9c5146104e0576101d7565b80639e281a98116100dc5780639e281a981461041a578063a22cb46514610436578063b187bd2614610452578063c4d66de814610470576101d7565b8063836a1040146103d65780638456cb59146103f25780638da5cb5b146103fc576101d7565b80632eb2c2d61161017a57806363e547171161014957806363e547171461037857806364e39b87146103945780636b0b0b4c146103b0578063715018a6146103cc576101d7565b80632eb2c2d6146103065780633f4ba83a146103225780634e1273f41461032c5780635660571d1461035c576101d7565b80630e89341c116101b65780630e89341c1461026b5780631d1d49bc1461029b578063271cacbf146102ce5780632d785461146102ea576101d7565b8062fdd58e146101db57806301ffc9a71461020b5780630aa30f911461023b575b5f80fd5b6101f560048036038101906101f09190612c32565b610580565b6040516102029190612c7f565b60405180910390f35b61022560048036038101906102209190612ced565b6105e3565b6040516102329190612d32565b60405180910390f35b61025560048036038101906102509190612d4b565b6106c4565b6040516102629190612de9565b60405180910390f35b61028560048036038101906102809190612d4b565b61072d565b6040516102929190612e8c565b60405180910390f35b6102b560048036038101906102b09190612d4b565b6107cd565b6040516102c59493929190612eac565b60405180910390f35b6102e860048036038101906102e3919061302f565b61087d565b005b61030460048036038101906102ff9190613089565b61098a565b005b610320600480360381019061031b9190613237565b610a4a565b005b61032a610af1565b005b61034660048036038101906103419190613302565b610b40565b604051610353919061342f565b60405180910390f35b6103766004803603810190610371919061344f565b610c47565b005b610392600480360381019061038d9190612d4b565b610cb1565b005b6103ae60048036038101906103a991906134c6565b610de1565b005b6103ca60048036038101906103c5919061351b565b610edd565b005b6103d4610f9c565b005b6103f060048036038101906103eb919061356b565b610faf565b005b6103fa6111ed565b005b61040461123d565b60405161041191906135ca565b60405180910390f35b610434600480360381019061042f9190612c32565b611272565b005b610450600480360381019061044b91906135e3565b611415565b005b61045a61142b565b6040516104679190612d32565b60405180910390f35b61048a600480360381019061048591906134c6565b611440565b005b6104a660048036038101906104a19190613621565b61161f565b005b6104c260048036038101906104bd9190613621565b6116be565b005b6104de60048036038101906104d9919061344f565b611757565b005b6104fa60048036038101906104f5919061365f565b6117ed565b6040516105079190612d32565b60405180910390f35b61052a600480360381019061052591906134c6565b611889565b005b6105466004803603810190610541919061369d565b611985565b005b610562600480360381019061055d91906134c6565b611a2c565b005b61057e60048036038101906105799190613089565b611ab0565b005b5f8061058a611b6e565b9050805f015f8481526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205491505092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ad57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106bd57506106bc82611b95565b5b9050919050565b5f80548210610708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ff9061377a565b60405180910390fd5b60075f8381526020019081526020015f205f9054906101000a900460ff169050919050565b60605f610738611b6e565b9050806002018054610749906137c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610775906137c5565b80156107c05780601f10610797576101008083540402835291602001916107c0565b820191905f5260205f20905b8154815290600101906020018083116107a357829003601f168201915b5050505050915050919050565b5f805f805f548510610814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080b9061377a565b60405180910390fd5b5f60065f8781526020019081526020015f206040518060800160405290815f820154815260200160018201548152602001600282015481526020016003820154815250509050805f01518160200151826040015183606001519450945094509450509193509193565b610885611bfe565b5f5b815181101561098557600160095f8581526020019081526020015f205f8484815181106108b7576108b66137f5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550818181518110610921576109206137f5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16837f6ac489d45eb8bf1a970353adde961baf16a2ab4af3d2a8f0cb488b0cd30af85660016040516109709190612d32565b60405180910390a38080600101915050610887565b505050565b610992611bfe565b600160095f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff16827f6ac489d45eb8bf1a970353adde961baf16a2ab4af3d2a8f0cb488b0cd30af8566001604051610a3e9190612d32565b60405180910390a35050565b5f610a53611c85565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610a985750610a9686826117ed565b155b15610adc5780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610ad3929190613822565b60405180910390fd5b610ae98686868686611c8c565b505050505050565b610af9611bfe565b5f60085f6101000a81548160ff0219169083151502179055507fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693360405160405180910390a1565b60608151835114610b8c57815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401610b83929190613849565b60405180910390fd5b5f835167ffffffffffffffff811115610ba857610ba7612ef3565b5b604051908082528060200260200182016040528015610bd65781602001602082028036833780820191505090505b5090505f5b8451811015610c3c57610c12610bfa8287611d8090919063ffffffff16565b610c0d8387611d9390919063ffffffff16565b610580565b828281518110610c2557610c246137f5565b5b602002602001018181525050806001019050610bdb565b508091505092915050565b610c4f611bfe565b60405180608001604052808581526020018481526020018381526020018281525060065f8781526020019081526020015f205f820151815f01556020820151816001015560408201518160020155606082015181600301559050505050505050565b610cb9611bfe565b5f548110610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf39061377a565b60405180910390fd5b5f60075f8381526020019081526020015f205f9054906101000a900460ff1690505f6001811115610d3057610d2f612d76565b5b816001811115610d4357610d42612d76565b5b14610d4e575f610d51565b60015b60075f8481526020019081526020015f205f6101000a81548160ff02191690836001811115610d8357610d82612d76565b5b0217905550817f99c4b048db360a284beab48162b7b7ada2dd6d5c555ffdf52937a231dfa3828760075f8581526020019081526020015f205f9054906101000a900460ff16604051610dd59190612de9565b60405180910390a25050565b610de9611bfe565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e906138ba565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fb5a01e5ec02137db653e6529ccf56f49d7bebf608d3fda902f37b79c7fbc170760405160405180910390a250565b610ee5611bfe565b80600a5f8581526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16837fcd562783e68004e0418ae06c88594f011f881c3f1d3634794cbcea8618bcc0f983604051610f8f9190612d32565b60405180910390a3505050565b610fa4611bfe565b610fad5f611da6565b565b610fb7611bfe565b5f548310610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff19061377a565b60405180910390fd5b60025f8481526020019081526020015f205481111561104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590613922565b60405180910390fd5b60035f8481526020019081526020015f20544210158015611080575060045f8481526020019081526020015f20544211155b6110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906139b0565b60405180910390fd5b600a5f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f90613a18565b60405180910390fd5b61117282848360405180602001604052805f815250611e77565b8060025f8581526020019081526020015f205f8282546111929190613a63565b92505081905550828273ffffffffffffffffffffffffffffffffffffffff167f3a8a89b59a31c39a36febecb987e0657ab7b7c73b60ebacb44dcb9886c2d5c8a836040516111e09190612c7f565b60405180910390a3505050565b6111f5611bfe565b600160085f6101000a81548160ff0219169083151502179055507f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b5f80611247611f0c565b9050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b61127a611bfe565b5f81116112bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b390613ae0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361133f576112f761123d565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611339573d5f803e3d5ffd5b506113c3565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61136361123d565b836040518363ffffffff1660e01b8152600401611381929190613afe565b6020604051808303815f875af115801561139d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c19190613b39565b505b8173ffffffffffffffffffffffffffffffffffffffff167f6352c5382c4a4578e712449ca65e83cdb392d045dfcf1cad9615189db2da244b826040516114099190612c7f565b60405180910390a25050565b611427611420611c85565b8383611f33565b5050565b5f60085f9054906101000a900460ff16905090565b5f6114496120aa565b90505f815f0160089054906101000a900460ff161590505f825f015f9054906101000a900467ffffffffffffffff1690505f808267ffffffffffffffff161480156114915750825b90505f60018367ffffffffffffffff161480156114c457505f3073ffffffffffffffffffffffffffffffffffffffff163b145b9050811580156114d2575080155b15611509576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001855f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315611556576001855f0160086101000a81548160ff0219169083151502179055505b61156d60405180602001604052805f8152506120d1565b611576866120e5565b61157e61123d565b600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508315611617575f855f0160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2600160405161160e9190613bb9565b60405180910390a15b505050505050565b611627611bfe565b61271081111561166c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166390613c42565b60405180910390fd5b8060055f8481526020019081526020015f2081905550817f7ada5e87cc59c60275b60c7c0a0b0967c66da0c7496b6603d6dba99cd00ebd29826040516116b29190612c7f565b60405180910390a25050565b6116c6611bfe565b5f548210611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061377a565b60405180910390fd5b61171b611714611c85565b83836120f9565b817f401ca505317eed77a11d86cfdf8adc682b4c9cb9855ab9b951515e1b371c67ef8260405161174b9190612c7f565b60405180910390a25050565b61175f611bfe565b5f805f81548092919061177190613c60565b9190505590508560015f8381526020019081526020015f20819055508460025f8381526020019081526020015f20819055508360035f8381526020019081526020015f20819055508260045f8381526020019081526020015f20819055508160055f8381526020019081526020015f2081905550505050505050565b5f806117f7611b6e565b9050806001015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1691505092915050565b611891611bfe565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f690613cf1565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fb73754800f03854b30430e600482cee853e052eb1feea37fbf300a5fc524155e60405160405180910390a250565b5f61198e611c85565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156119d357506119d186826117ed565b155b15611a175780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611a0e929190613822565b60405180910390fd5b611a24868686868661219b565b505050505050565b611a34611bfe565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611aa4575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611a9b91906135ca565b60405180910390fd5b611aad81611da6565b50565b611ab8611bfe565b5f60095f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff16827f6ac489d45eb8bf1a970353adde961baf16a2ab4af3d2a8f0cb488b0cd30af8565f604051611b629190612d32565b60405180910390a35050565b5f7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500905090565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c06611c85565b73ffffffffffffffffffffffffffffffffffffffff16611c2461123d565b73ffffffffffffffffffffffffffffffffffffffff1614611c8357611c47611c85565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611c7a91906135ca565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611cfc575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611cf391906135ca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611d6c575f6040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611d6391906135ca565b60405180910390fd5b611d7985858585856122a1565b5050505050565b5f60208202602084010151905092915050565b5f60208202602084010151905092915050565b5f611daf611f0c565b90505f815f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082825f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ee7575f6040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611ede91906135ca565b60405180910390fd5b5f80611ef3858561234d565b91509150611f045f878484876122a1565b505050505050565b5f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b5f611f3c611b6e565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fae575f6040517fced3e100000000000000000000000000000000000000000000000000000000008152600401611fa591906135ca565b60405180910390fd5b81816001015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318460405161209c9190612d32565b60405180910390a350505050565b5f7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6120d961237d565b6120e2816123bd565b50565b6120ed61237d565b6120f6816123d1565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612169575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161216091906135ca565b60405180910390fd5b5f80612175848461234d565b91509150612194855f848460405180602001604052805f8152506122a1565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361220b575f6040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161220291906135ca565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361227b575f6040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161227291906135ca565b60405180910390fd5b5f80612287858561234d565b9150915061229887878484876122a1565b50505050505050565b6122ad85858585612455565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612346575f6122e9611c85565b90506001845103612335575f6123085f86611d9390919063ffffffff16565b90505f61231e5f86611d9390919063ffffffff16565b905061232e8389898585896127f7565b5050612344565b6123438187878787876129a6565b5b505b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b612385612b55565b6123bb576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6123c561237d565b6123ce81612b73565b50565b6123d961237d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612449575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161244091906135ca565b60405180910390fd5b61245281611da6565b50565b5f61245e611b6e565b905081518351146124aa57825182516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016124a1929190613849565b60405180910390fd5b5f6124b3611c85565b90505f5b84518110156126b5575f6124d48287611d9390919063ffffffff16565b90505f6124ea8387611d9390919063ffffffff16565b90505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614612611575f855f015f8481526020019081526020015f205f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156125bb57898183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016125b29493929190613d0f565b60405180910390fd5b818103865f015f8581526020019081526020015f205f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146126a85780855f015f8481526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546126a09190613d52565b925050819055505b50508060010190506124b7565b506001845103612770575f6126d35f86611d9390919063ffffffff16565b90505f6126e95f86611d9390919063ffffffff16565b90508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612761929190613849565b60405180910390a450506127ef565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516127e6929190613d85565b60405180910390a45b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561299e578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612857959493929190613e0c565b6020604051808303815f875af192505050801561289257506040513d601f19601f8201168201806040525081019061288f9190613e78565b60015b612913573d805f81146128c0576040519150601f19603f3d011682016040523d82523d5f602084013e6128c5565b606091505b505f81510361290b57846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161290291906135ca565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461299c57846040517f57f447ce00000000000000000000000000000000000000000000000000000000815260040161299391906135ca565b60405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b1115612b4d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612a06959493929190613ea3565b6020604051808303815f875af1925050508015612a4157506040513d601f19601f82011682018060405250810190612a3e9190613e78565b60015b612ac2573d805f8114612a6f576040519150601f19603f3d011682016040523d82523d5f602084013e612a74565b606091505b505f815103612aba57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612ab191906135ca565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b4b57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612b4291906135ca565b60405180910390fd5b505b505050505050565b5f612b5e6120aa565b5f0160089054906101000a900460ff16905090565b5f612b7c611b6e565b905081816002019081612b8f919061409d565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612bce82612ba5565b9050919050565b612bde81612bc4565b8114612be8575f80fd5b50565b5f81359050612bf981612bd5565b92915050565b5f819050919050565b612c1181612bff565b8114612c1b575f80fd5b50565b5f81359050612c2c81612c08565b92915050565b5f8060408385031215612c4857612c47612b9d565b5b5f612c5585828601612beb565b9250506020612c6685828601612c1e565b9150509250929050565b612c7981612bff565b82525050565b5f602082019050612c925f830184612c70565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ccc81612c98565b8114612cd6575f80fd5b50565b5f81359050612ce781612cc3565b92915050565b5f60208284031215612d0257612d01612b9d565b5b5f612d0f84828501612cd9565b91505092915050565b5f8115159050919050565b612d2c81612d18565b82525050565b5f602082019050612d455f830184612d23565b92915050565b5f60208284031215612d6057612d5f612b9d565b5b5f612d6d84828501612c1e565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110612db457612db3612d76565b5b50565b5f819050612dc482612da3565b919050565b5f612dd382612db7565b9050919050565b612de381612dc9565b82525050565b5f602082019050612dfc5f830184612dda565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e39578082015181840152602081019050612e1e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612e5e82612e02565b612e688185612e0c565b9350612e78818560208601612e1c565b612e8181612e44565b840191505092915050565b5f6020820190508181035f830152612ea48184612e54565b905092915050565b5f608082019050612ebf5f830187612c70565b612ecc6020830186612c70565b612ed96040830185612c70565b612ee66060830184612c70565b95945050505050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612f2982612e44565b810181811067ffffffffffffffff82111715612f4857612f47612ef3565b5b80604052505050565b5f612f5a612b94565b9050612f668282612f20565b919050565b5f67ffffffffffffffff821115612f8557612f84612ef3565b5b602082029050602081019050919050565b5f80fd5b5f612fac612fa784612f6b565b612f51565b90508083825260208201905060208402830185811115612fcf57612fce612f96565b5b835b81811015612ff85780612fe48882612beb565b845260208401935050602081019050612fd1565b5050509392505050565b5f82601f83011261301657613015612eef565b5b8135613026848260208601612f9a565b91505092915050565b5f806040838503121561304557613044612b9d565b5b5f61305285828601612c1e565b925050602083013567ffffffffffffffff81111561307357613072612ba1565b5b61307f85828601613002565b9150509250929050565b5f806040838503121561309f5761309e612b9d565b5b5f6130ac85828601612c1e565b92505060206130bd85828601612beb565b9150509250929050565b5f67ffffffffffffffff8211156130e1576130e0612ef3565b5b602082029050602081019050919050565b5f6131046130ff846130c7565b612f51565b9050808382526020820190506020840283018581111561312757613126612f96565b5b835b81811015613150578061313c8882612c1e565b845260208401935050602081019050613129565b5050509392505050565b5f82601f83011261316e5761316d612eef565b5b813561317e8482602086016130f2565b91505092915050565b5f80fd5b5f67ffffffffffffffff8211156131a5576131a4612ef3565b5b6131ae82612e44565b9050602081019050919050565b828183375f83830152505050565b5f6131db6131d68461318b565b612f51565b9050828152602081018484840111156131f7576131f6613187565b5b6132028482856131bb565b509392505050565b5f82601f83011261321e5761321d612eef565b5b813561322e8482602086016131c9565b91505092915050565b5f805f805f60a086880312156132505761324f612b9d565b5b5f61325d88828901612beb565b955050602061326e88828901612beb565b945050604086013567ffffffffffffffff81111561328f5761328e612ba1565b5b61329b8882890161315a565b935050606086013567ffffffffffffffff8111156132bc576132bb612ba1565b5b6132c88882890161315a565b925050608086013567ffffffffffffffff8111156132e9576132e8612ba1565b5b6132f58882890161320a565b9150509295509295909350565b5f806040838503121561331857613317612b9d565b5b5f83013567ffffffffffffffff81111561333557613334612ba1565b5b61334185828601613002565b925050602083013567ffffffffffffffff81111561336257613361612ba1565b5b61336e8582860161315a565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6133aa81612bff565b82525050565b5f6133bb83836133a1565b60208301905092915050565b5f602082019050919050565b5f6133dd82613378565b6133e78185613382565b93506133f283613392565b805f5b8381101561342257815161340988826133b0565b9750613414836133c7565b9250506001810190506133f5565b5085935050505092915050565b5f6020820190508181035f83015261344781846133d3565b905092915050565b5f805f805f60a0868803121561346857613467612b9d565b5b5f61347588828901612c1e565b955050602061348688828901612c1e565b945050604061349788828901612c1e565b93505060606134a888828901612c1e565b92505060806134b988828901612c1e565b9150509295509295909350565b5f602082840312156134db576134da612b9d565b5b5f6134e884828501612beb565b91505092915050565b6134fa81612d18565b8114613504575f80fd5b50565b5f81359050613515816134f1565b92915050565b5f805f6060848603121561353257613531612b9d565b5b5f61353f86828701612c1e565b935050602061355086828701612beb565b925050604061356186828701613507565b9150509250925092565b5f805f6060848603121561358257613581612b9d565b5b5f61358f86828701612c1e565b93505060206135a086828701612beb565b92505060406135b186828701612c1e565b9150509250925092565b6135c481612bc4565b82525050565b5f6020820190506135dd5f8301846135bb565b92915050565b5f80604083850312156135f9576135f8612b9d565b5b5f61360685828601612beb565b925050602061361785828601613507565b9150509250929050565b5f806040838503121561363757613636612b9d565b5b5f61364485828601612c1e565b925050602061365585828601612c1e565b9150509250929050565b5f806040838503121561367557613674612b9d565b5b5f61368285828601612beb565b925050602061369385828601612beb565b9150509250929050565b5f805f805f60a086880312156136b6576136b5612b9d565b5b5f6136c388828901612beb565b95505060206136d488828901612beb565b94505060406136e588828901612c1e565b93505060606136f688828901612c1e565b925050608086013567ffffffffffffffff81111561371757613716612ba1565b5b6137238882890161320a565b9150509295509295909350565b7f496e76616c696420746f6b656e204944000000000000000000000000000000005f82015250565b5f613764601083612e0c565b915061376f82613730565b602082019050919050565b5f6020820190508181035f83015261379181613758565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806137dc57607f821691505b6020821081036137ef576137ee613798565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506138355f8301856135bb565b61384260208301846135bb565b9392505050565b5f60408201905061385c5f830185612c70565b6138696020830184612c70565b9392505050565b7f496e76616c69642077616c6c65742061646472657373000000000000000000005f82015250565b5f6138a4601683612e0c565b91506138af82613870565b602082019050919050565b5f6020820190508181035f8301526138d181613898565b9050919050565b7f4578636565647320746f6b656e20737570706c790000000000000000000000005f82015250565b5f61390c601483612e0c565b9150613917826138d8565b602082019050919050565b5f6020820190508181035f83015261393981613900565b9050919050565b7f4d696e74696e67206e6f7420616c6c6f776564206f757473696465206d696e745f8201527f696e6720706572696f6400000000000000000000000000000000000000000000602082015250565b5f61399a602a83612e0c565b91506139a582613940565b604082019050919050565b5f6020820190508181035f8301526139c78161398e565b9050919050565b7f5573657220697320626c61636b6c6973746564000000000000000000000000005f82015250565b5f613a02601383612e0c565b9150613a0d826139ce565b602082019050919050565b5f6020820190508181035f830152613a2f816139f6565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a6d82612bff565b9150613a7883612bff565b9250828203905081811115613a9057613a8f613a36565b5b92915050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f613aca602083612e0c565b9150613ad582613a96565b602082019050919050565b5f6020820190508181035f830152613af781613abe565b9050919050565b5f604082019050613b115f8301856135bb565b613b1e6020830184612c70565b9392505050565b5f81519050613b33816134f1565b92915050565b5f60208284031215613b4e57613b4d612b9d565b5b5f613b5b84828501613b25565b91505092915050565b5f819050919050565b5f67ffffffffffffffff82169050919050565b5f819050919050565b5f613ba3613b9e613b9984613b64565b613b80565b613b6d565b9050919050565b613bb381613b89565b82525050565b5f602082019050613bcc5f830184613baa565b92915050565b7f526f79616c746965732070657263656e746167652063616e6e6f7420657863655f8201527f6564203130303030202831303025290000000000000000000000000000000000602082015250565b5f613c2c602f83612e0c565b9150613c3782613bd2565b604082019050919050565b5f6020820190508181035f830152613c5981613c20565b9050919050565b5f613c6a82612bff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613c9c57613c9b613a36565b5b600182019050919050565b7f496e76616c6964206275726e20616464726573730000000000000000000000005f82015250565b5f613cdb601483612e0c565b9150613ce682613ca7565b602082019050919050565b5f6020820190508181035f830152613d0881613ccf565b9050919050565b5f608082019050613d225f8301876135bb565b613d2f6020830186612c70565b613d3c6040830185612c70565b613d496060830184612c70565b95945050505050565b5f613d5c82612bff565b9150613d6783612bff565b9250828201905080821115613d7f57613d7e613a36565b5b92915050565b5f6040820190508181035f830152613d9d81856133d3565b90508181036020830152613db181846133d3565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f613dde82613dba565b613de88185613dc4565b9350613df8818560208601612e1c565b613e0181612e44565b840191505092915050565b5f60a082019050613e1f5f8301886135bb565b613e2c60208301876135bb565b613e396040830186612c70565b613e466060830185612c70565b8181036080830152613e588184613dd4565b90509695505050505050565b5f81519050613e7281612cc3565b92915050565b5f60208284031215613e8d57613e8c612b9d565b5b5f613e9a84828501613e64565b91505092915050565b5f60a082019050613eb65f8301886135bb565b613ec360208301876135bb565b8181036040830152613ed581866133d3565b90508181036060830152613ee981856133d3565b90508181036080830152613efd8184613dd4565b90509695505050505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613f657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f2a565b613f6f8683613f2a565b95508019841693508086168417925050509392505050565b5f613fa1613f9c613f9784612bff565b613b80565b612bff565b9050919050565b5f819050919050565b613fba83613f87565b613fce613fc682613fa8565b848454613f36565b825550505050565b5f90565b613fe2613fd6565b613fed818484613fb1565b505050565b5b81811015614010576140055f82613fda565b600181019050613ff3565b5050565b601f8211156140555761402681613f09565b61402f84613f1b565b8101602085101561403e578190505b61405261404a85613f1b565b830182613ff2565b50505b505050565b5f82821c905092915050565b5f6140755f198460080261405a565b1980831691505092915050565b5f61408d8383614066565b9150826002028217905092915050565b6140a682612e02565b67ffffffffffffffff8111156140bf576140be612ef3565b5b6140c982546137c5565b6140d4828285614014565b5f60209050601f831160018114614105575f84156140f3578287015190505b6140fd8582614082565b865550614164565b601f19841661411386613f09565b5f5b8281101561413a57848901518255600182019150602085019450602081019050614115565b868310156141575784890151614153601f891682614066565b8355505b6001600288020188555050505b50505050505056fea264697066735822122094387ffe01fc9daf5b89859bc8d1d76fb50b06b4585b21f7a937bbb111e8b34464736f6c63430008180033